基于rails4中关联表的关系排序

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)