您好我有一个排名系统,如果他们有相同的分数或分数,那么两个用户应该具有相同的排名。
我通过索引获取它,但如果它们具有相同的分数,则无法使它们的索引相等
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个是帖子中最高的,那么他们必须具有第一等级。
任何变通办法都将受到赞赏
答案 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
该语句的结果为您提供了所有实际应用分数的排序数组。由于您确实知道当前用户的分数,因此您可以获得该分数的索引,这也是排名。