ActiveRecord:如何通过所有相关记录查找记录?

时间:2012-03-09 17:44:51

标签: sql ruby-on-rails ruby-on-rails-3 activerecord many-to-many

使用ActiveRecord,您可以将字段和数组传递到WHERE,如下所示:

Product.joins(:category).where('category.id' => [x,y,z])

(在这种情况下,Product与Category有很多关系)

这使用IN运算符查找ID为x,y或z的所有类别的产品

我想要的是找到ID为x,y和z的所有类别的产品。我知道你可以产生这样的结果:

Product.joins(:category).where('category.id' => x).where('category.id' => y).where('category.id' => z)

换句话说,我想找到提供所有类别的产品。

我觉得我可以做更简单的事情。有什么想法吗?


更新:我相信this question is relevant,仍然无法让它发挥作用。仍然认为可能还有另一种方法可以做到这一点。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

Product.joins(:category)
    .where('category.id = ? AND category.id = ? AND category.id = ?',x,y,z)

答案 1 :(得分:0)

没有尝试过...但是下面的内容会给你一些提示 -

Product.joins(:categories).select("products.*, GROUP_CONCAT('categories.id') as category_ids").group('products.id').having('category_ids = ?', [1,2,3])