我有一个具有以下模型的 Rails 应用程序:
- 用户
- 下注
用户有 many_bets 和 Bets_belongs_to User。每个投注都有一个 Profitloss 值,表明用户在该投注中赢/输了多少。
因此,为了计算特定用户总共赢得了多少,我通过以下方式循环他的投注:
User.bets.sum(:profitloss)
我想向用户显示他与所有其他用户相比的排名,可能如下所示:
“您的综合排名:第 37 位”
为此,我需要汇总每个用户的总奖金,并找出当前用户的位置。
我该怎么做以及如何做,这样才不会使服务器重载 :)
谢谢!
最佳答案
你可以尝试类似的东西
User.join(:bets).
select("users.id, sum(bets.profitloss) as accumulated").
group("users.id").
order("accumulated DESC")
然后在“用户”的结果列表中搜索(不是真正的用户,他们只有两个有意义的属性,他们的 ID 和一个具有总和的 accumulated
属性),对应于当前的。
无论如何要得到单个用户的位置,你必须计算所有用户的累计
,但至少这只是一个查询。更好的是,您可以将累积值存储在用户模型中,并仅查询它以进行排名。
关于ruby-on-rails - 排名位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12664499/