Rails查询JOIN与WHERE NOT不起作用?

时间:2018-03-18 12:01:27

标签: ruby-on-rails

试图弄清楚这个查询是如何工作的:

@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})

1 个答案:

答案 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)
)