我有三种模式:
我想知道每个发布商有多少本书,按发布商分组,并由发布商按大多数图书订购。我需要获得一个包含单个查询的列表,我可以在其中获得类似的内容:
图书属于作者而不是发布者直接复杂以解释原因。有没有一种简单的方法来实现这一目标?
答案 0 :(得分:0)
使用has_many through
定义publisher
和books
之间的关系
# publisher.rb
has_many :books, :through => :authors
然后你得到这样的有序计数
records = Publisher.joins(:books).
group("publishers.id").
select("publishers.*, COUNT(*) AS books_count").
order("books_count DESC")
# => access book count as record.book_count
如果您需要经常访问发布商的图书计数,请考虑在publishers表中添加名为books_count
的列(以提高效果)。您可以使用counter cache
答案 1 :(得分:0)
这应该有效:
counts = Publisher.joins(:authors => :books).
select('publishers.id, count(books.id) as number').
group('publishers.id')
# count[0] is now a Publisher object; and counts[0].number is the count of books they own