我想知道我应该如何进行像 twitter 这样的 Rails 表单搜索来搜索多个模型。
我已经实现了一个搜索模型/控制器,它将基于文本框进行搜索并最终具有 ajax。但我只是想知道如何在我的头文件中实现它。渲染可能是工作,但不确定如何调用搜索控制器。
提前致谢。按照本教程http://railscasts.com/episodes/111-advanced-search-form
我想知道我应该如何进行像 twitter 这样的 Rails 表单搜索来搜索多个模型。
我已经实现了一个搜索模型/控制器,它将基于文本框进行搜索并最终具有 ajax。但我只是想知道如何在我的头文件中实现它。渲染可能是工作,但不确定如何调用搜索控制器。
提前致谢。按照本教程http://railscasts.com/episodes/111-advanced-search-form
一种方法是创建一个 Search 类。创建一个具有查询输入的表单部分,该输入在提交时发送到 Search 类。然后搜索将提供一组搜索结果,然后您将其输出到单独的视图。拥有一个 Search 类可以让您为您的搜索保留额外的功能——额外的模型和对结果进行排名的方法。
这是一个骨架示例...
class Search
attr_accessor :query
def initialize(*args)
self.query = args[0] && args[0][:query] ? args[0][:query] : nil
end
def elements
query.nil? ? [] : query.downcase.split(/ /)
end
def class_a
class_a_objects = []
...some code that finds the objects you are searching for...
return class_a_objects.uniq
end
def class_b
class_a_objects = []
...some code that finds the objects you are searching for...
return issuers.uniq
end
def class_c
..
end
....
def results
class_a_objects + class_b_objects + class_c_objects
end
end
在每个类的搜索代码中,使用“元素”方法搜索各个查询对象。
对于表格
= form_tag("/search", :method => :get) do
= text_field 'search', :query
= submit_tag 'search'
路由.rb
match '/search' => "search#query", :as => 'search'
然后是一个带有“查询”操作的搜索控制器。在此控制器中,只需执行
class SearchController
def query
@results = Search.new(:query => params[:search][:query] ).results
end
end
为此控制器操作添加一个视图“搜索”,您可以在其中呈现@results。您的结果将是来自不同类的单个对象的集合,因此您的视图可以根据对象类单独处理每个项目,这些项目可以使用其他部分进行处理。