这是针对使用PostgreSQL的Rails 5 / Active Record 5。
假设我有两个模型:Product
和Widget
。Product
has_many
小部件和Widget
has_many
产品通过称为products_widgets
的联接表。
我想编写一个查询,以查找与both具有id=37
的小部件相关的所有产品和具有id=42
的小部件。
我实际上有一个ID列表,但是如果我可以编写上面的查询,则通常可以解决此问题。
请注意,此查询更简单的版本是查找与[[0具有id=37
的小部件相关的所有小部件或具有id=42
的小部件,您可以编写如下:] >Product.joins(:products_widgets).where(products_widgets: {widget_id: [37, 42]})
但这不是我所需要的。
这是使用PostgreSQL的Rails 5 / Active Record 5。假设我有两个模型:Product和Widget。一个产品has_many小部件和一个has_many小部件通过名为...
product
.where('exists(select 1 from products_widgets where product_id = product.product_id and widget_id = ?)', 37)
.where('exists(select 1 from products_widgets where product_id = product.product_id and widget_id = ?)', 42)
我认为使用.arel.exist
也可能有效:
product
.where(products_widgets.where('product_id = product.product_id and widget_id = ?', 37).arel.exists
.where(products_widgets.where('product_id = product.product_id and widget_id = ?', 42).arel.exists