计算多个Rails对象之间的关联数

时间:2011-09-29 19:00:00

标签: ruby-on-rails

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

我希望能够确定某些文章存在多少评论总数。例如:文章#20,#21和#22之间总共有X条评论。

任何指针都会很棒!

3 个答案:

答案 0 :(得分:2)

我建议:

Comment.where(:article_id => [20, 21, 22]).count

在数据库中进行计数等,并且在一个查询中(在这种情况下,ActiveRecord将会尽可能高效)。

答案 1 :(得分:0)

您可以在counter_cache

中添加articles
class Article
  has_many :comments, :counter_cache => true
end

并在comments_count表格中添加articles列。

(http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)然后将其总结为。

Article.where(:id => [20,21,22]).sum(:comments_count)

答案 2 :(得分:0)

如果您愿意,可以在没有计数器缓存的情况下轻松完成此操作。

Article.where(:id => [20,21,22]).joins(:comments).count