ItemTag というモデルを介して多対多の関係を持つ Item と Tag の 2 つのモデルがあります。ユーザーが、指定された tags.tag_name のすべてのセットを持つすべてのアイテムを見つけられるようにしたいと考えています。したがって、テーブルは次のようになります。
アイテム
ID
...
アイテムタグ
ID
item_id
tag_id
...
タグ
ID
タグ名
...
データベースに次の item / tag_name の組み合わせがあるとします (items_tags 結合テーブルですが)
項目 1: 「赤」、「黄」、「青」
項目 2: 「赤」、「黄」、「オレンジ」
項目 3: 「赤」、「オレンジ」、「紫」
ユーザーは、Tag.tag_names "red" と "yellow" に関連付けられているすべてのアイテムを取得したいと考えています (明らかに、アイテム 1 とアイテム 2 が返されます)。Rails3でこれを構築するにはどうすればよいですか? 私の仮定では、SQL ステートメントは次のことを行う必要があります。
1: item_tags と tags を結合し、tag_name "red" を持つタグに関連付けられているすべての items_tags 行を取得します。
2: その結果セットを再度タグ テーブルに結合し、結果セットを tag_name "yellow" のタグに関連付けられた行に絞り込みます。
3: アイテムを最終結果セットと結合して、両方のタグに関連付けられたアイテムのリストを取得します
選択される tag_names の数は任意であることに注意してください。ユーザーは基準として 1..n tag_names を選択する可能性があるため、できれば生の SQL を使用せずに、このクエリを動的に構築できる必要があります。