0

Rails 3.1.1 で ActiveRecord クエリに苦労しています。

製品とカテゴリの 2 つのモデルがあり、製品からカテゴリへの has_and_belongs_to_many があります (製品には多くのカテゴリを含めることができます)。

指定されたすべてのカテゴリを持つ製品を検索する検索クエリを作成しようとしています (ユーザーが X カテゴリを選択して検索できる検索 UI を考えてください)。

私がすることができます:

results = Product.joins(:category_products).where('category_products.category_id' => [1,5,8])

ただし、これらのカテゴリのいずれかを持つ製品が返されます (つまり、SQL "IN(1,5,8)" 句が生成されます)。

ALL スタイルのマッチングを行うクエリを作成するにはどうすればよいですか? たとえば、これらすべての category_ids を持つ製品を見つけます...

4

2 に答える 2

4

これは、having 句で行うことができます。

@ids = [1,5,8]
query = Product.select('products.id,products.name').joins(:categories) \
               .where(:categories => {:id => @ids}) \
               .group('products.id, products.name') \
               .having("count(category_products.category_id) = #{@ids.length}")
于 2012-08-09T16:00:17.583 に答える
0
results = Product.joins(:category_products)
[1,5,8].each do |category|
  results = results.where('category_products.category_id' => category)
end
于 2012-08-09T14:51:11.727 に答える