ruby-on-rails - 排名位置

标签 ruby-on-rails sum ranking

我有一个具有以下模型的 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/

相关文章:

ruby-on-rails - :new, :collection and :member routes? 有什么区别

在 Prolog 中添加列表

algorithm - 根据人们的首选列表为人们分配他们最喜欢的值的算法是什么?

python - Pandas 的条件排名

ruby-on-rails - 我应该如何通过关联建立 has_one?

ruby-on-rails - Rails Scope返回all而不是nil

mysql - 在 ROR 中创建数据库时出错

arrays - 从特定元素添加的数组中的 Swift 求和数

python - numpy cumsum() 不起作用?

algorithm - Groovy 中的简单排名算法