如果相同的分数则在RAILS 3.2中排名相同

时间:2013-09-12 11:43:15

标签: ruby-on-rails

您好我有一个排名系统,如果他们有相同的分数或分数,那么两个用户应该具有相同的排名。

我通过索引获取它,但如果它们具有相同的分数,则无法使它们的索引相等

user.rb

def get_rank
    x = User.get_rank.index(self)
    x ? (x + 1) : x
end

def self.get_rank
  Response.joins(:answer).where("answers.correct is TRUE").map(&:user).uniq.sort_by(&:score).reject{|me| me.super_admin or me.questions.count < Question.count}.reverse
end

如何让具有相同分数的用户只有1个相似的排名。

E.g。如果两个用户都获得了25分,并且25个是帖子中最高的,那么他们必须具有第一等级。

任何变通办法都将受到赞赏

1 个答案:

答案 0 :(得分:2)

这个问题相当令人困惑,但我认为你可以更好地利用数据库功能。也许这样的东西有效,因为我不知道你的完整模型,特别是哪个对象有用户的分数。我假设它在用户对象上:

def get_rank
    scores = User.select(:score).joins(:response, :answers).where(:answers => [:correct => true]).order('score DESC').group(:score).all
    # example result: [24, 22, 21, 20 ...]
    rank = scores.index(score) + 1
end

该语句的结果为您提供了所有实际应用分数的排序数组。由于您确实知道当前用户的分数,因此您可以获得该分数的索引,这也是排名。