3

結果にすべてのモデルの結果が含まれるように検索したい複数のモデルがあります。たとえば、「ブーツ」を検索して、実際のブーツだけでなく、ブーツを販売する小売業者だけでなく、ブーツ カテゴリも返したいとします。カテゴリ、ベンダー、および製品のモデルがあります。

この場合、すべてのオブジェクトに結合が必要であり、すべてのオブジェクトが検索に含まれるため、これは必要ないため、結合テーブルを作成する必要はありません。

ransack gem を使用することを考えていますが、検索手順に関係なく同じであるため、これは質問にとって重要ではないと思います。

composer_of 関係は理にかなっているかもしれませんが、私はそれについて頭を悩ませることはできません。

4

2 に答える 2

1

Product belongs_toaVendorbelongs_toaCategoryがクエリであると仮定します。

string_to_search = 'boots'
@products = Product.where("title LIKE ?", "%#{string_to_search}%").includes(:vendor, :category).all

必要なタイトルのコンテンツを含むすべての製品と、そのすべてのカテゴリおよびベンダーが取得されます。特定の製品のカテゴリ/ベンダーを取得するための追加のクエリなしで、結果のデータをトラバースできます。

たとえば、ベンダーのリストを抽出する必要がある場合は、次を@products使用します。

@vendors = @products.map &:vendor
于 2012-04-15T15:46:54.527 に答える
0

手動で作成した SQL クエリで UNION 演算子を使用する必要があると思います。ActiveModel を使用して擬似モデルを作成し、アグリゲーターとして機能して、実際のモデルから検索結果を収集し、クエリに対して ActiveRecord のようなインターフェイスを提示できます。

于 2012-04-15T14:57:11.050 に答える