rails3范围,用于has_many关系中的子项数

ist*_*tan 11 ruby ruby-on-rails ruby-on-rails-3

试图在rails3中做一个范围.

:book has_many :chapters 
Run Code Online (Sandbox Code Playgroud)

我想要范围:长期返回> 10章的书籍.

如何最好地构建此范围(不使用计数器缓存)?

谢谢!

leo*_*ges 19

这应该让你去:

class Book
  scope :long, joins(:chapters).
                 select('books.id, count(chapters.id) as n_chapters').
                 group('books.id').
                 having('n_chapters > 10')
end
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

  • 看起来不对,但我收到一个错误:'column"card_count"不存在'(card_count是我的n_chapters).`have`的所有内容似乎都能正常工作,当我直接在SQL控制台中运行时,card_count列肯定会被填充... (3认同)

Chr*_*yle 8

啊 - 在上面的评论中回答我自己的问题,我不得不把计数放在HAVING中:

class Book
  scope :long, joins(:chapters).
    select('books.id').
    group('books.id').
    having('count(chapters.id) > 10')
end
Run Code Online (Sandbox Code Playgroud)