Rails关联组按计数进行加载

时间:2018-07-05 14:14:30

标签: ruby-on-rails activerecord

我有两个相互关联的模型:

class Article < ApplicationRecord
    belongs_to :author
end

class Author < ApplicationRecord
    has_many :articles
end

我需要计算每个作者撰写的文章数量-返回如下所示的哈希值:

{"John" => 6, "Peter" => 20, "Alice" => 12}

为了避免N + 1查询问题,我尝试了以下方法:

Article.includes(:author).group(:author_id).count

# => {1 => 6, 2 => 20, 3 => 12 }

从John的id为1,Peter的id为2等等的角度来看,这是正确的,但是我需要在哈希中使用它们的名称(column:name)而不是id。

如何用最少数量的查询访问数据库?

1 个答案:

答案 0 :(得分:1)

您可以使用 joins 代替 includes ,如下所示。

Article.joins(:author).group("author.name").count