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)