2011-07-03 7 views
7

カウンタキャッシュを持たない1対多の関係で、どのように子供がいない親を見つけることができますか?Rails 3子なしの親を見つける

user.rb

has_many :pages 

page.rb

belongs_to :user 

私は、これは、MySQLでトラブルを作っている

User.includes(:pages).where("pages.user_id is NULL") 

を試してみました。

答えて

14

User.joins("left join pages on pages.user_id = users.id").where("pages.user_id is null") 
+0

おかげでうまくいくかもしれないと考えています。 – rubyrubyruby

+0

+1はArelが美しいので、 – jaydel

+0

ありがとう、それは私にも多くの助けになりました! – sidney

0

一つの方法は、

User.where("(SELECT COUNT(*) FROM pages WHERE pages.user_id = users.id) = 0") 

だろう試してみてくださいしかし、私は効率的(に)されることかどうかはわかりません。

+2

カウント(*)は、一般的なクエリであれば個人的に実行したいものではありません。 –

0

私は

User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id") 

のようなものは、それは私をたくさん助けたも...

関連する問題