Сортировка массива объектов по дочернему атрибуту - PullRequest
0 голосов
/ 22 марта 2012

У меня есть массив объектов, и мне нужно отсортировать их по атрибуту average_score их дочернего элемента.Я пробовал с sort!, но, похоже, это не работает, я не уверен, что могу использовать ассоциации Rails здесь:

collection.sort! do |a, b|
  a.children.where(:user_id => current_user.id).first.average_score <=> b.children.where(:user_id => current_user.id).first.average_score
end

Кто-нибудь может подсказать, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Когда a, b являются экземплярами User, я бы сделал это

class User
  has_many :children

  # This still looks smelly, has many children
  # but only getting score of first one?
  def children_average_score
    first_child = self.children.where(:user_id => self.id).first

    return first_child.nil ? 0 : first_child.average_score
  end
end

А потом твой род:

collection.sort! do |a, b|
  a.children_average_score <=> b.children_average_score
end
1 голос
/ 22 марта 2012
collection.sort_by do |x|
  x.children.where(:user_id => current_user.id).first.average_score
end

Хотя я бы искал чистое и более быстрое решение SQL.

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