我正在创建一个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文件夹中。
感谢您的帮助!
答案 0 :(得分: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
答案 1 :(得分:0)
如果您有大量数据,您可能想要查看的另一个涉及的解决方案是SQL中的freetext search
。
可以跨多个表执行此操作,并按照thoughtbot in their blog所述将其与rails集成。