Как подсчитать общее количество дочерних записей списка родительских записей в Rails? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть две модели: команда и игрок. Игроки принадлежат к командам и командам have_many Players.

Если у меня есть массив команд, возвращенный как current_user.teams, как я могу подсчитать общее количество игроков во всех этих командах?

Я пыталсявыполняя следующее:

current_user.teams.collect { |team| team.players }.count

Но это просто подсчитывает количество команд, поскольку каждый массив team.players хранится как одна строка в массиве current_user.teams, даже если каждая запись team.players является массивомсо многими записями каждая учитывается только один раз.

Как я могу разбить массивы team.players для подсчета каждого игрока в них в окончательном подсчете?

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Array.collect запускает блок для каждого элемента из массива и возвращает новый массив, и, следовательно, вы должны использовать sum

try,

current_user.teams.collect { |team| team.players }.sum

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

Если у вас есть такой вариант использования, вы можете попробовать предложение @ jvillian,

Player.where(team_id: current_user.teams).count
0 голосов
/ 21 октября 2019

Попробуйте:

Player.where(team_id: current_user.teams).count

Я настоятельно рекомендую вам прочитать руководство по ActiveRecord Query Interface .

Кстати, collect повторяет ActiveRecord::Relation (или любой другой тип enumerable, который у вас есть), что кажется мне ненужным, когда вы можете просто выполнить запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...