我正在开发一款卡牌游戏。每张卡都存储在一张桌子(卡片)中并具有一定数量的积分。如果用户赢了一张卡,他就可以获得该卡的积分。在这种情况下,记录会保存在持有card_id
,user_id
和success = true
的user_card表中(如果他丢失了卡success = false
)。
card.rb
class Card < ActiveRecord::Base
has_many :user_cards
has_many :users, through: :user_cards
end
user_card.rb
class UserCard < ActiveRecord::Base
belongs_to :user
belongs_to :card
end
我现在要做的是创建一个排行榜。因此我需要:
我尝试了一些方法,比如group_by(&amp;:something),join等等。但是,我无法使它工作。当我必须对单个表中的内容进行分组和总结时,我没有遇到任何问题。但是,我不知道如何从一个用户名中获取用户名,而另一个表中的点数则根据user_card表进行总结。
我怎样才能做到这一点?
答案 0 :(得分:2)
users = User.joins(:cards).
select(:username, 'sum(cards.score) as score').
where(user_cards: {success: true}).
group(:id).
order('score desc')
#=> #<ActiveRecord::Relation [#<User username: 'bob'>]>
users.first.username
#=> "bob"
users.first.score
#=> 15