我有两个模型如下:
class Student < ActiveRecord::Base
has_many :marks
end
class Mark < ActiveRecord::Base
belongs_to :student
end
point
是标记表中的字段。对于每个学生,标记表中有许多条目。
我需要根据最高总积分的顺序获得学生名单。
我试过如下:
@students = Student.all.collect{|p| [p,p.marks.pluck(:point).sum]}
@students.sort_by { |h| h[1] }.reverse!
但它会在每个数组中返回2个项目,一个是对象,接下来是总点数。
请问是否有更好的解决方案。
谢谢,
Jissy
答案 0 :(得分:6)
这应该可以解决问题:
Student.joins(:marks).select('students.*, SUM(marks.point) AS total_point').group(:id).order('total_point DESC')
答案 1 :(得分:4)
你可以这样做。
Student.joins(:marks).select('id, sum(marks.point) as total_marks').group('students.id').order('total_marks desc')
如果您仍然无法运行它,请修改它或让我知道。在选择id的位置,您可以选择任何列。