Rails中的组和总和

时间:2017-07-19 20:23:12

标签: ruby-on-rails ruby activerecord

我正在开发一款卡牌游戏。每张卡都存储在一张桌子(卡片)中并具有一定数量的积分。如果用户赢了一张卡,他就可以获得该卡的积分。在这种情况下,记录会保存在持有card_iduser_idsuccess = 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

我现在要做的是创建一个排行榜。因此我需要:

  1. 通过user_id
  2. 将所有user_cards分组,其中success = true
  3. 按用户
  4. 汇总成功的user_cards的所有积分(存储在卡表中)
  5. 显示用户名(来自用户表)和此用户的总和
  6. 我尝试了一些方法,比如group_by(&amp;:something),join等等。但是,我无法使它工作。当我必须对单个表中的内容进行分组和总结时,我没有遇到任何问题。但是,我不知道如何从一个用户名中获取用户名,而另一个表中的点数则根据user_card表进行总结。

    我怎样才能做到这一点?

1 个答案:

答案 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