7

In a one to many relationship with no counter cache how can I find parents with no child?

user.rb

has_many :pages

page.rb

belongs_to :user

I've tried

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

This is making trouble in MySQL.

Jon
  • 2,932
  • 2
  • 23
  • 30

3 Answers3

15

Try

User.joins("left join pages on pages.user_id = users.id").where("pages.user_id is null")
Omar Qureshi
  • 8,963
  • 3
  • 33
  • 35
0

I believe something like

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

might work also...

rogerdpack
  • 62,887
  • 36
  • 269
  • 388
0

One way would be

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

But I'm not sure how (in)efficient that would be.

Dogbert
  • 212,659
  • 41
  • 396
  • 397