3

简单的任务:假设一篇文章有​​很多评论,可以在一个长长的文章列表中显示每篇文章有多少评论。我正在尝试研究如何使用 Arel 预加载这些数据。

自述文件的“复杂聚合”部分似乎讨论了这种情况,但它并没有提供示例代码,也没有提供在两个查询而不是一个连接查询中执行此操作的方法,这对于表现。

鉴于以下情况:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

我怎样才能为一篇文章预加载设置每个有多少评论?

4

2 回答 2

4

你不能为此使用计数器缓存吗?

belongs_to :article, :counter_cache => true

您还需要进行添加列 comments_count 的迁移

于 2010-07-27T20:32:15.583 回答
2

您可以使用 SQL 做一些讨厌的事情,例如:

default_scope :select => 'articles.*, (select count(comments.id) from comments where comments.article_id = articles.id) as count_comments'

然后您就可以访问 Article.first.count_comments。

另一种(更好的)方法是使用belongs_to关联中的 'counter_cache' 功能/选项。

于 2010-04-08T08:41:09.863 回答