1

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

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

用户.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 个相似排名。

例如,如果两个用户都得到 25 分,并且 25 是帖子中最高的,那么他们一定是第一名。

任何解决方法将不胜感激

4

1 回答 1

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

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

于 2013-09-12T12:27:32.947 回答