我有三个模特:
我想知道每个出版商有多少本书,按出版商分组,与大多数图书一起按出版商排序。我需要一个带有一个查询的列表,在其中我可以得到如下内容:
书籍属于作者,但不属于出版商,直接由-complicated解释原因。有什么简单的方法可以做到这一点吗?
发布于 2013-10-16 03:02:39
使用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
如果您经常需要访问publisher的图书计数,那么请考虑在publisher表中添加一个名为books_count
的列(以提高性能)。您可以使用计数器缓存更新它。
发布于 2013-10-16 03:09:26
这应该是可行的:
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
https://stackoverflow.com/questions/19401413
复制