Rails - Postgres - Группировка по количеству связанных объектов - PullRequest
2 голосов
/ 12 февраля 2020

У меня есть модель User и модель Redemption. Пользователь может сделать несколько выкупов. Я хочу получить количество пользователей, которые сделали 1 погашение, 2, 3, ....

Модель пользователя

has_many :redemptions, foreign_key: :redeemed_by

Модель погашения

belongs_to :user, foreign_key: :redeemed_by

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

 User.joins(:redemptions).group('redemptions.redeemed_by').count

Результат:

{185=>2, 187=>1, 2042=>4, 2544=>1} 

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

Я хочу добиться этого с помощью запроса Rails.

1 Ответ

3 голосов
/ 12 февраля 2020

Вы можете сделать это

User.joins(:redemptions)
    .group('redemptions.redeemed_by').count
    .group_by{|k,v| v}
    .map{|k,v| [k, v.size]}.to_h

возвращает

{1 => 2, 4 => 2, 5 => 1}

, где 1 , 4 и 5 (ключи) - это количество выкупов, а 2, 2, 1 (значения) - количество пользователей, которые выкупили это много раз.

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