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

时间:2016-06-29 05:12:24

标签: ruby postgresql ruby-on-rails-4 activerecord

我有两个模型如下:

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

2 个答案:

答案 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的位置,您可以选择任何列。