如何通过关联记录的属性订购Rails集合?

时间:2013-04-17 23:27:27

标签: sql ruby-on-rails rails-activerecord active-record-query

我有三种模式:教师,学生和作业

class Teacher < ActiveRecord::Base
  has_many :assignments
  has_many :students, through: assignments, uniq: true
end

对于任何给定的老师,我想查找一份独特的学生名单 - 很简单,我只是打电话:

teacher.students

但是,我想根据最近提交作业的人来订购学生名单。具体来说,我希望具有最近更新作业的学生首先出现,依此类推。

我被困在以下代码中,但这不起作用:

teacher.students.group("assignments.student_id").order("MAX(assignments.updated_at) DESC")

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我的原始查询似乎是正确的:

teacher.students.group("assignments.student_id").order("MAX(assignments.updated_at) DESC")

我原本认为它不起作用,因为我写了一个糟糕的RSpec测试,因为我没有很好地处理时间戳。一旦我使用Timecop正确处理时间戳,测试就通过了。

很抱歉。

答案 1 :(得分:0)

没有经过测试,但我相信

teacher.students.includes(:assignments).order('assignments.updated_at')

应该有效