0

複数のモデルを検索するには、twitter のような Rails フォーム検索をどのように進めればよいか考えています。

テキストボックスに基づいて検索し、最終的にajaxを持つ検索モデル/コントローラーを実装しました。しかし、ヘッダーファイルにどのように実装できるのか疑問に思っています。レンダリングは仕事かもしれませんが、検索コントローラーを呼び出す方法がわかりません。

前もって感謝します。このチュートリアルに従いましたhttp://railscasts.com/episodes/111-advanced-search-form

4

1 に答える 1

0

1つのアプローチは、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

各クラスの検索コードで、「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をレンダリングします。結果は、さまざまなクラスの個々のオブジェクトのコレクションになるため、ビューは各アイテムを個別に処理でき、オブジェクトクラスに基づいて追加のパーシャルで処理できます。

于 2012-08-08T20:11:25.647 に答える