如何插入像twitter这样的表单搜索

时间:2012-08-08 19:57:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我想知道如何继续使用像twitter这样的rails形式搜索来搜索多个模型。

我已经实现了一个搜索模型/控制器,它将根据文本框进行搜索,最终会有ajax。但我只是想知道如何在我的头文件中实现它。渲染可能是工作,但不知道如何调用搜索控制器。

提前致谢。遵循本教程http://railscasts.com/episodes/111-advanced-search-form

1 个答案:

答案 0 :(得分:0)

一种方法是创建一个Search类。创建一个包含查询输入的表单partial,在提交时将其发送到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

在每个类的搜索代码中,使用“elements”方法搜索各个查询对象。

表格

= form_tag("/search", :method => :get) do
  = text_field 'search', :query
  = submit_tag 'search'

的routes.rb

match '/search' => "search#query", :as => 'search'

然后是具有“查询”操作的搜索控制器。在这个控制器中,只需执行

class SearchController
   def query
     @results = Search.new(:query => params[:search][:query] ).results
   end
end

为此控制器操作添加视图“搜索”,您可以在其中呈现@results。您的结果将是来自不同类的单个对象的集合,因此您的视图可以单独处理每个项目,可以使用基于对象类的其他部分来处理。