我有两个对象:
class Person < ActiveRecord::Base
has_many :tests
end
class Test <ActiveRecord::Base
belongs_to :person
end
我需要通过测试中的分数总和来对所有人物对象进行排序。另一个技巧是每个人可能没有测试。
我已经通过我的测试得到了这个,但我无法根据该人的分数总和让他们订购,因为我无法弄清楚如何引用计算的值。
Score.sum(:score, :group => :person_id)
一旦我有了这个,我如何将其归还给要排序的球员列表?
答案 0 :(得分:1)
老问题,但最近我试图找到类似问题的解决方案:
在rails 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}")