我有一个带有两个表的基本Rails-API应用程序:
学生有很多考试。考试属于一名学生。
我想根据最近创建的考试分数(desc)学生。这就是我所想的:
@students = Student.all.includes(:exams).order...????
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
尝试:
Student.all.joins(:exams).order("exams.created_at DESC, exams.score DESC")
但是,我认为还有更好的方法。
答案 1 :(得分:0)
试试这个:
Student.joins('LEFT OUTER JOIN `exams` on `students`.`id` = `exams`.`student_id`')
.order("`exams`.`created_at` DESC, `exams`.`score` DESC")
因为inner join
会跳过那些没有参加考试的学生。
答案 2 :(得分:0)
这是一种非常难看的方式......但是......
@students = Student.all
sort_this = []
@students.each do |student|
sort_this << { student => student.exams.order('created_at DESC').first }
end
@sorted = sort_this.sort_by! { |hash| hash.values.first.score }.reverse!
如果我只想要一组已排序的学生,我可以继续只提取哈希键。