试图弄清楚这个查询是如何工作的:
@items = Item.joins(:assignments).where.not(assignments: {shop_id: some_id})
我想获得所有与某些shop_id没有分配关联的项目。
奇怪的是,考虑到这个查询是可行的,它不起作用(仅显示具有分配关联的项目,一些shop_id):
@items = Item.joins(:assignments).where(assignments: {shop_id: some_id})
答案 0 :(得分:1)
您必须了解SQL ControlBus JOIN
。
你得到所有Item
只是因为Assignment
s" good" shop_id
也存在。所以,Rails做得对。
您需要的查询应如下所示:
Item.where.not(
id: Assignment.where(shop_id: some_id).select(:item_id)
)