trying to do a scope in rails3.
:book has_many :chapters
I want scope :long to return books with > 10 chapters.
How best to structure this scope (without use of counter cache) ?
thanks!
This should get you going:
class Book
scope :long, joins(:chapters).
select('books.id, count(chapters.id) as n_chapters').
group('books.id').
having('n_chapters > 10')
end
Does it help?
Ah - to answer my own question in the comment above, I had to put the count in the HAVING:
class Book
scope :long, joins(:chapters).
select('books.id').
group('books.id').
having('count(chapters.id) > 10')
end
In rails 4.0 this version works. You have to count() in the having clause. It seems that having clause doesn't see 'as n_chapters'.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With