Сортировать по счету через другую модель - PullRequest
1 голос
/ 13 марта 2012

У меня есть пользовательская модель, которая имеет оценку метода, которая фактически получает сумму баллов за решенные задачи:

  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 ]

3 голосов
/ 13 марта 2012
def index
  @users = User.all.sort_by(&:score).reverse
  @users = Kaminari.paginate_array(@users).page(params[:page]).per(2)
end
1 голос
/ 13 марта 2012

Рубиновый способ сделать это - использовать collection.sort_by

Пример:

collection.sort_by{|o|o.score}

Цепь .reverse / .reverse!если нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...