2012-08-09 66 views
0

我在Rails 3.1.1中的ActiveRecord查詢中苦苦掙扎。查找符合所有分類的產品(Rails 3.1)

我有兩個模型,產品和類別,從產品到類別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)」 條款)。

如何創建一個查詢來執行所有匹配風格?例如。發現有所有這些category_ids的產品...

回答

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}") 
0
results = Product.joins(:category_products) 
[1,5,8].each do |category| 
    results = results.where('category_products.category_id' => category) 
end 
+1

這將返回0行,我...當它不應該 – 2012-08-09 17:15:41