试图弄清楚为什么这个查询不起作用:
@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})
你必须
学习SQL JOIN
是如何工作的。
你得到所有Item
只是因为Assignment
"好"shop_id
也存在。所以,Rails做对了。
您需要的查询应如下所示:
Item.where.not(
id: Assignment.where(shop_id: some_id).select(:item_id)
)