Rails:如何通过最近创建的关联表值来订购表?

时间:2016-02-25 00:18:41

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

我有一个带有两个表的基本Rails-API应用程序:

  • 学生(姓名,年龄)
  • 考试(分数,created_at)

学生有很多考试。考试属于一名学生。

我想根据最近创建的考试分数(desc)学生。这就是我所想的:

@students = Student.all.includes(:exams).order...????

非常感谢任何帮助。谢谢!

3 个答案:

答案 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!

如果我只想要一组已排序的学生,我可以继续只提取哈希键。