选择没有嵌套对象的Object的最简单方法是什么?

时间:2013-09-11 17:01:52

标签: ruby-on-rails

说我有Item that has_many Posts

我需要选择没有任何帖子的项目。

我目前的解决方案是:

Item.where("NOT EXISTS (SELECT 1 FROM posts p WHERE p.item_id = items.id)")

这是最好的方法吗?也许应该以某种方式使用OUTER JOIN?


阅读完建议后 - 我使用了以下代码:

Item.includes(:posts).where(:posts => {:item_id => nil})

或者使用Squeel gem:

Item.includes{:posts}.where{posts.item_id == nil}

我喜欢它,因为它不需要任何手动SQL。

谢谢你们。

1 个答案:

答案 0 :(得分:1)

.includes为您创建LEFT JOIN

Item.includes(:posts).where('posts.item_id IS NULL')