jis*_*ssy 3 ruby postgresql activerecord ruby-on-rails-4
我有2个型号如下:
class Student < ActiveRecord::Base
has_many :marks
end
class Mark < ActiveRecord::Base
belongs_to :student
end
Run Code Online (Sandbox Code Playgroud)
point是标记表中的字段.对于每个学生,标记表中有许多条目.
我需要根据最高总积分的顺序获得学生名单.
我试过如下:
@students = Student.all.collect{|p| [p,p.marks.pluck(:point).sum]}
@students.sort_by { |h| h[1] }.reverse!
Run Code Online (Sandbox Code Playgroud)
但它会在每个数组中返回2个项目,一个是对象,另一个是总点数.
请问有更好的解决方案吗?
谢谢,
Jissy
小智 6
这应该做的伎俩:
Student.joins(:marks).select('students.*, SUM(marks.point) AS total_point').group(:id).order('total_point DESC')
Run Code Online (Sandbox Code Playgroud)