Reputation: 1092
I have a User model and a Redemption model. An user can make multiple redemptions. I want to get the number of users who have made 1 redemption, 2, 3,....
User Model
has_many :redemptions, foreign_key: :redeemed_by
Redemption Model
belongs_to :user, foreign_key: :redeemed_by
I could run the following query and get redemptions against each user.
User.joins(:redemptions).group('redemptions.redeemed_by').count
Result:
{185=>2, 187=>1, 2042=>4, 2544=>1}
which gives me the count of redemptions each user has made. But I want the reverse. I want how many users have made 1 redemptions, how many 2 and goes on...
I want to achieve this through Rails query.
Upvotes: 2
Views: 117
Reputation: 1812
You can do this
User.joins(:redemptions)
.group('redemptions.redeemed_by').count
.group_by{|k,v| v}
.map{|k,v| [k, v.size]}.to_h
returns
{1=>2, 4=>2, 5=>1}
where 1, 4 and 5 (the keys) are the number of redemptions and 2, 2, 1 (the values) are the number of users who have redemeed this many times.
Upvotes: 3