0

假设我有一个用户模型:

    class User < ActiveRecord::Base

    end

和一个答案模型:

    class Answer < ActiveRecord::Base
      belongs_to :user

    end

为了鼓励用户给出更多答案,我想为特定用户显示他/她在所有用户中的排名。(排名基于他/她给出的答案数量)

由于隐私问题,我不想创建排名板。我只想返回一条消息“你在给出的答案数量上击败了 xx% 的用户”。

我有一个粗略的想法是进行分组并获取该用户的排名编号,但我不确定如何使其尽可能高效。

4

1 回答 1

1
class User < ActiveRecord::Base
  def answered_percentile
    user_answer_count = answers.count
    less = User.all.map {|u| u.answers.count}.select {|e| e < user_answer_count}.count
    100 * less / User.count
  end
end

u = User.find(42)
puts "you beat #{u.answered_percentile}% of users in the number of answers given out"
于 2013-05-15T18:27:36.527 回答