通过其他模型按分数排序

时间:2012-03-13 04:48:01

标签: ruby-on-rails ruby-on-rails-3

我的用户模型有一个方法得分,实际上得到了已解决挑战得分的总和:

  def score
    self.challenge_level_solutions.inject(0) do |sum, x|
        sum + x.challenge_level.points
    end
  end

现在,我有一个与Kaminari相关的控制器动作,如:

  def index
    @users = User.page(params[:page])
  end

我的问题是如何以DESC顺序显示用户分数,即向用户显示分数较低的其他分数。我的观点是:

<% @users.each_with_index do |user, index| %>
    <%= user.username %> - <%= user.score %>
    <br>
<% end %>

并显示:

1. user1 - 0 
2. user2 - 0 
3. user3 - 2 

任何想法都能正确显示,首先是user3吗?

2 个答案:

答案 0 :(得分:3)

def index
  @users = User.all.sort_by(&:score).reverse
  @users = Kaminari.paginate_array(@users).page(params[:page]).per(2)
end

答案 1 :(得分:1)

执行此操作的ruby方法是使用collection.sort_by

示例:

collection.sort_by{|o|o.score}

链.reverse / .reverse!如果需要的话。