Rails: как группировать по вложенным ассоциациям? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть модель Follow с user_id и track_id. Модель Track имеет поле artist_id.

Я хочу подсчитать, у каких артистов больше всего подписчиков, но поскольку пользователи следуют "трекам", а не "артистам", мне нужно выяснить, как сделайте счет по трекам.

Итак, я подумал о том, чтобы создать какую-то группу по вложенной ассоциации. то есть группировать записи Follow по «track -> artist_id», каким-то образом.

Тогда я мог бы посчитать количество пользователей для каждого.

Возможно ли это вообще? Есть ли дополнительная информация, которая будет полезна здесь?

1 Ответ

1 голос
/ 19 февраля 2020

Вам необходимо использовать has_many :through, чтобы установить sh Исполнитель <-> Треки <-> Отношения пользователя.

class Artist < ApplicationRecord
  has_many :tracks
  has_many :users, through: :tracks
end

class Follow < ApplicationRecord
  belongs_to :user
  belongs_to :track
end

class Track < ApplicationRecord
  belongs_to :artist
  has_and_belongs_to_many :users, join_table: :follows
end

class User < ApplicationRecord
  has_and_belongs_to_many :tracks
  has_many :artists, through: :tracks, join_table: :follows
end

Тогда Rails может позаботиться о соединениях от Artist до User.

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