1

我正在创建一个 Rails 应用程序,用户可以在其中发布指向他们在网络上拥有的实时网站的链接,以及网站的内容和编码它的编程语言。

我正在尝试创建一个可以搜索一些内容的搜索表单:

(1) 发布链接的 URL (2) 编程语言 (3) 用户名

我有一个链接和一个用户模型。

class Link < ActiveRecord::Base
belongs_to :user

    def self.search(search)
        where("language LIKE ?", "%#{search}%")
        where("url LIKE ?", "%#{search}%")
    end
end

class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

has_many :links

def self.search(search)
    where("name LIKE ?", "%#{search}%")
end
end

我的用户和链接控制器索引方法如下:

class LinksController < ApplicationController
before_action :set_link, only: [:show, :edit, :update, :destroy, :upvote]
before_filter :authenticate_user!, except: [:index, :show]

def index
    @links = Link.search(params[:link])
end

class UsersController < ApplicationController

def index
    @users = User.search(params[:user])
end

我将如何将所有搜索职责委托给单个搜索栏。本质上,我只想让搜索栏能够搜索我上面提到的 3 个属性。我打算把它放在 index/layouts/application.html.erb 文件夹中。

谢谢您的帮助!

4

2 回答 2

0

如果您有大量数据,您可能想要查看的另一个涉及的解决方案是freetext searchSQL 内部。

可以跨多个表执行此操作,并将其与 rails 集成,如thinkbot 在其博客中所述。

于 2016-01-13T09:43:38.140 回答
0

所以如果我理解正确:

您应该为搜索页面创建控制器,例如SearchController仅使用index操作。

比创建类似 Search.rb 的模型

Search = Struct.new(:search_text) do
  def run
    users = User.where(name: search_text)
    links = Link.where(title: search_text)
    {users: users, links: links}
  end
end

控制器:

def index
  @result = Search.run(params[:search])
end

所以这只是一个例子,你应该根据你的需要修改它。

编辑

视野中(苗条):

b User List
ul
  - @result[:users].each |user|
    = user.name

和同样的links

于 2016-01-12T09:17:31.733 回答