1

私が持っているとしましょう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 を必要としないため、これが気に入っています。

みんなありがとう。

4

1 に答える 1

1

は、次の.includesを作成LEFT JOINします。

Item.includes(:posts).where('posts.item_id IS NULL')
于 2013-09-11T17:07:13.237 に答える