Упорядочивание объектов по сумме ассоциации has_many - PullRequest
1 голос
/ 13 августа 2010

У меня есть два объекта:

class Person < ActiveRecord::Base
   has_many :tests
end

class Test <ActiveRecord::Base
   belongs_to :person
end

Мне нужно отсортировать все мои личные объекты по сумме баллов по тесту. Еще одна хитрость в том, что у каждого человека может не быть теста.

Я дошел до этого с помощью моих тестов, но я не могу привести их в порядок, основываясь на сумме баллов для этого человека, потому что я не могу понять, как ссылаться на вычисляемое значение.

Score.sum(:score, :group => :person_id)

Как только я получу это, как вернуть его в список игроков для сортировки?

1 Ответ

1 голос
/ 26 января 2012

Старый вопрос, но недавно я пытался найти решение подобной проблемы:

в рельсах 3, это просто

class Person < ActiveRecord::Base
  has_many :tests
  scope :order_by_score, lambda {|direction| joins(:tests).group(:person_id).order("sum(score) #{direction}")
end
# when Person also has attribute 'score', it should be .order("sum('tests.score') #{direction}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...