2011-07-03 17 views
7

En una relación uno a muchos sin caché de contador ¿cómo puedo encontrar padres sin hijos?Rieles 3 encontrar padres que no tienen hijos

user.rb

has_many :pages 

page.rb

belongs_to :user 

He intentado

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

Esto está haciendo problemas en MySQL.

Respuesta

14

Trate

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

Gracias Me ayudó mucho. – rubyrubyruby

+0

+1 porque Arel es hermoso – jaydel

+0

¡Gracias, me ayudó mucho también! – sidney

0

Una forma sería

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

pero no estoy seguro de cómo la (in) eficiente que sería.

+2

recuento (*) no es algo que personalmente quisiera ejecutar si fuera una consulta común. –

0

creo que algo así como

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

podría funcionar también ...

Cuestiones relacionadas