哪里没有通过rails中的连接表

时间:2014-12-16 03:14:08

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有一个product表和一个line_items表。

通过联接表product product_line_items has_and_belongs_to_many line_items。

如何进行查询,以便将所有不在line_item ID中显示的产品退回给我?

我正在思考以下几点:

Product.joins(:line_items).where.not(line_items: {id: 6})

但这让我没有任何行,因为它正在进行内部联接,实际上我的产品现在都不在任何订单项中......

有没有一种简单的方法可以写这个或者我是否必须进行左连接查询?

所以我想找到所有没有出现在line_item ID 6中的产品(包括根本没有出现在订单项中的产品!)。是否有一个我没有发现的简单查询语法?

谢谢,很多。

2 个答案:

答案 0 :(得分:0)

我不确定你为什么要这样做,因为line_items_products的ID对你来说没用。

但你可以在活跃记录中这样做:

Product.joins(line_items).where("line_items_products.id <> ?", 6)

答案 1 :(得分:0)

好的,所以对于任何有兴趣的人我最终都会这样做:

Product.where.not(id: line_item_6.products.map(&:id))

line_item_6是对ID为6的line_item模型的引用。