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

Ruby on rails 如何插入像twitter这样的表单搜索,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我想知道我应该如何使用rails表单搜索,比如twitter来搜索多个模型 我已经实现了一个搜索模型/控制器,它将基于文本框进行搜索,并最终拥有ajax。但我只是想知道如何在头文件中实现它。渲染可以完成任务,但不确定如何调用搜索控制器 提前谢谢。遵循本教程,一种方法是创建搜索类。创建一个表单部分,该表单包含一个查询输入,提交时将发送到搜索类。搜索将产生一组搜索结果,然后输出到一个单独的视图。拥有一个搜索类可以让你在搜索中保留额外的功能——额外的模型和结果排名方式 这里是一个骨骼的例子 class

我想知道我应该如何使用rails表单搜索,比如twitter来搜索多个模型

我已经实现了一个搜索模型/控制器,它将基于文本框进行搜索,并最终拥有ajax。但我只是想知道如何在头文件中实现它。渲染可以完成任务,但不确定如何调用搜索控制器


提前谢谢。遵循本教程,一种方法是创建搜索类。创建一个表单部分,该表单包含一个查询输入,提交时将发送到搜索类。搜索将产生一组搜索结果,然后输出到一个单独的视图。拥有一个搜索类可以让你在搜索中保留额外的功能——额外的模型和结果排名方式

这里是一个骨骼的例子

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。您的结果将是来自不同类的单个对象的集合,因此您的视图可以单独处理每个项目,可以根据对象类使用附加的部分来处理这些项目。

当发送到搜索类时,您如何定义它?用一些可能会让您开始的内容更新了我的答案。另外,还应以部分样本形式提交。这将是一个部分,你可以在你想要的任何页面上显示,如果有人提交查询,它将转到你在routes.rb中定义的“/search”。我认为它工作得很好,并且可以通过你将来可能要添加的任何其他类进行扩展。是的,我有一个幻灯片问题,控制器的名称是什么,应该是搜索吗?我会保持搜索,因为搜索函数是一个单数活动,而不是活动记录对象所期望的复数。尤其是因为在搜索控制器上只有一个操作——查询。因此url本身更有意义:“/search/query”,而不是“/search/query”。