14

私には3つのモデル(User、、 )がありTagProductそれらは相互作用します。UserTagsProducts

検索のために、ユーザー名、タグ名、製品の説明を(1つの検索バーで)検索できるようにしたいと思います。商品ページも検索したいのですが、タグ名と商品説明にしか関係ありません。

次に2つの例を示します。

検索:「LinusTorvalds」は、3つのモデルのLinus Torvaldsのすべてのインスタンスを返し、ユーザー名のインスタンスは上位に配置されます。

検索:「Linux」、年齢:「20-25」は、名前/説明に「Linux」を含み、その年齢範囲に該当する製品を使用するユーザーのすべてのインスタンスと、「Linux」を含むタグを使用するユーザーを返します。その年齢範囲に該当する製品があります。検索に年齢が含まれていなかった場合、デフォルトでは「Linux」の部分に当てはまるすべての人がデフォルトになります。

私の質問は、これを行うための最良の方法は何でしょうか?独自のコントローラーを使用して検索モデルを作成する必要がありますか?それを無視して、検索部分を共有フォルダーに含める必要がありますか?他にどのような方法がありますか?

どうもありがとう。

4

1 に答える 1

23

複雑な条件を実行している場合は、Searchオブジェクトのアイデアが好きです。

ただし、Sunspotを使用してオブジェクト全体を検索するには、次のようにします。

@sunspot_search = Sunspot.search User, Tag, Product do |query| 
  query.keywords @search_query
  query.with(:age).greater_than 20
  query.with(:age).less_than 25
  query.paginate(:page => params[:page], :per_page => 30)
end
于 2011-05-17T22:42:02.187 に答える