HOWTO在Ruby on rails上按平衡对项目进行排名

我正在实施一个投注系统,每个用户都有一个余额,我如何使用activerecord方法找到用户的排名? 谢谢你的帮助。

要获得用户的排名,

Users.all(:order => "balance").index(a_particular_user) 

这应该为您提供所有用户数组中特定用户的索引(排名)(按余额排序)。

如果您有很多用户,这是一个稍微有效的解决方案:

 Users.order(:balance).pluck(:id).index(a_particular_user_id)` 

这样,您的应用程序将获取n个整数ID,而不是拉动和实例化整个User记录/对象。 可能会更快地达到数量级。

几天前我问过同样的问题

对象在数据库中的位置

我的解决方案与@Drew Johnson建议的相同( User.all.index current_user )。 但我需要“查询解决方案”和@Vlad Zloteanu给了我很好的主意:

 User.count(:order => "balance", :conditions => ['balance < (?)', current_user.balance]) 

这是大数据表的快速查询解决方案。

如果我理解了你想要的东西,你只需要通过余额订购用户

 User.all(:order => "balance") 

编辑:除非balance不是属性…

编辑#2:在看到Drew Johnson的回答后,我意识到我误解了你的问题。 正如他所说,你可以使用index方法来做你想要的。

 @user = User.first @rank = User.all(:order => "balance").index(@user)