1

こんにちは、ランク付けシステムを使用しています。スコアまたはポイントが同じ場合、両方のユーザーが同じランクになるはずです。

インデックスを介して取得していますが、スコアが同じ場合、両方のインデックスを等しくすることができません

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 つの類似ランクにするにはどうすればよいですか。

たとえば、両方のユーザーが 25 ポイントを獲得し、25 が投稿の最高点である場合、2 人が 1 位になる必要があります。

任意の回避策をいただければ幸いです

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 に答える