Группа ассоциаций Rails по количеству с нетерпением загрузки - PullRequest
0 голосов
/ 05 июля 2018

У меня есть две модели, связанные друг с другом:

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 }

Это в некотором роде правильно в том смысле, что идентификатор Джона равен 1, идентификатор Питера равен 2 и т. Д., Но мне нужны их имена (колонка: имя) в хэше вместо идентификатора.

Как я могу сделать это с наименьшим количеством запросов, попадающих в базу данных?

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете использовать объединений вместо , включая , как показано ниже.

Article.joins(:author).group("author.name").count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...