首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过三个关联计数和分组记录

通过三个关联计数和分组记录
EN

Stack Overflow用户
提问于 2013-10-16 10:45:47
回答 2查看 70关注 0票数 0

我有三个模特:

  • 书belongs_to :作者
  • 作者belongs_to :publisher,has_many :books
  • Publisher has_many :作者

我想知道每个出版商有多少本书,按出版商分组,与大多数图书一起按出版商排序。我需要一个带有一个查询的列表,在其中我可以得到如下内容:

  • 出版商ABC: 3800本书
  • 出版商XYZ: 1922年
  • 出版商JKL: 192本书
  • 诸若此类

书籍属于作者,但不属于出版商,直接由-complicated解释原因。有什么简单的方法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-16 11:02:39

使用has_many through定义publisherbooks之间的关系如下

代码语言:javascript
代码运行次数:0
运行
复制
# publisher.rb

has_many :books, :through => :authors

然后你得到这样的命令数

代码语言:javascript
代码运行次数:0
运行
复制
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的列(以提高性能)。您可以使用计数器缓存更新它。

票数 0
EN

Stack Overflow用户

发布于 2013-10-16 11:09:26

这应该是可行的:

代码语言:javascript
代码运行次数: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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19401413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档