当前位置: 首页 > 面试题库 >

从ActiveRecord获得排名

刘京
2023-03-14
问题内容

如果Users有分数,假设标准位置,我如何获得用户排名:

require 'active_record'

class User < ActiveRecord::Base
  def rank
    # ???
  end
end

User.all
# => [<User id:1 points:100>, <User id:2 points:400>, <User id:3 points:100>, <User id:4 points:250>]

User.find_by_id(2).rank
# => 1
User.find_by_id(3).rank
# => 3
User.find_by_id(1).rank
# => 3

我得到的独特印象是这将是数据库密集型的。我对此不太担心,但是显然,需要较少处理能力的解决方案才是赢家!

如果给两个具有相同点数的用户相同的排名太复杂了,我准备接受上面的用户1可能是排名3,而用户3可能是排名4。

编辑:

实际上,我是在单独的一堂课中存储gmy分数-因为每个事件都需要一定数量的分数。

class Event < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :events

  def points
    events.sum(:amount)
  end

  def rank
    # This seems a bit ham-handed
    Event.count_by_sql(['select count(*) from (select sum(amount) as points from events group by user_id) where points > ?',points]) + 1
  end
end

关于如何使其更简洁的任何想法?

提前致谢


问题答案:

您可以计算点数较少的用户数,然后加一。

def rank
  User.where("points > ?", points).count + 1
end

这将为用户1和3返回3。



 类似资料:
  • 问题内容: 在Rails 3.2中,是否有任何便捷的方法通过将具有特定字段的特定值的记录移动到关系的前面来订购ActiveRecord关系?例如,如果有一个attribute ,我想对任何查询返回的关系进行排序,其中记录必须位于该关系的前面。 问题答案: 这样的事情。显然,“名称,ID”将取决于您的型号和要求。

  • 问题内容: 我正在开发一个大型应用程序,因此必须从Google Play服务的排行榜中获得玩家的排名。排行榜运作良好。我已经找到了正确的方法,但是我不知道该如何使用它: 但是从未调用过回调。我应该在哪里调用函数loadRankOfLeaderBoard?我试图把它的,并在… 谢谢你的帮助! 问题答案: 好吧,我终于找到解决方法了…… 出于好奇 因此,如果您遇到相同的问题,则必须将函数loadRan

  • ActiveRecord 是个轻量级的核心数据的活动记录。

  • Castle ActiveRecord框架是一个基于.NET的ORM框架,它实现了ActiveRecord设计模式。它本身就是基于NHibernate,只是封 装了NHibernate的大部分烦杂细节,对于需要持久化的类,只需继承自ActiveRecordBase类,并对类中的property赋予正确的 Attribute,而无需编写烦杂的mapping file。对于大型系统复杂的数据库逻辑,C

  • php-activerecord 是一个基于 ActiveRecord 设计模式 开发的开源PHP ORM库。它旨在大大简化与数据库的交互和减少手写 SQL 语句。它不同于其他的ORM,你不需要使用任何的代码生成器,也不费劲去手写、维护模型层的表映射文件。这个库的灵感来自Ruby on Rails ,因此它也借鉴Ruby on Rails 的想法和实现。另外,它也很容易地整合到ZF、CodeIgn

  • 问题内容: 假设我在sqlite DB中有一个表,其中有两个字段:名称和年龄。 如何查询sqlite表中的Zek,并确定他是最老的?更笼统地说,假设我有数百万个名称和年龄,并且我想查询一个特定的条目,例如name =“ Juju bear”,并通过不同的字段查找条目的排名,例如,“ Juju bear”的排名为133455(按年龄)。 谢谢, 科罗拉多州 问题答案: 您可以使用子查询来计算年龄较大