关于sql:ActiveRecord:如何按其所有关联记录查找记录?

ActiveRecord: How do I find records by all of their associated records?

使用ActiveRecord,您可以像这样将字段和数组传递到WHERE中:

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

(在这种情况下,产品与类别具有多对多的关系)

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

我想做的是找到ID为x,y和z的所有产品。我知道您可以像这样产生这种结果:

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

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

我觉得我可以在这里做一些简单的事情。有什么想法吗?

更新:我相信这个问题是相关的,但仍然难以解决。仍然认为可能还有另一种方法。


Havent尝试过...但是类似下面的内容应该给您提示入门-

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

这如何:

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