问题来源:我有Stream
模型,has_may :students
:through => :assignments
。 Student
有一个关联的帐户。我需要有默认订单:@stream.students
按students.account.surname DESC
经过一段时间后,我认为Rails预定义方法没有设置类似的东西,所以我决定重新定义Stream
实例方法students
。
def students(options={})
opt = options || {:order=>true, :attr=>"surname", :way=>"DESC"}
if opt[:order]
students = Student.joins("INNER JOIN assignments ON students.id = assignments.student_id WHERE assignments.stream_id = #{self.id}").includes(:account).order("accounts.#{opt[:attr]} #{opt[:way]}")
else
students = Student.joins("INNER JOIN assignments ON students.id = assignments.student_id WHERE assignments.stream_id = #{self.id}").includes(:account)
end
end
在我发现一些收集方法停止工作之前,它工作得很好,比如stream.students.delete(@student)
。
所以我不需要覆盖,而是扩展@stream.students
方法的功能。
我该怎么做?
答案 0 :(得分:0)
您应该能够使用rails方法处理此问题:
has_many :students, -> { joins(:account).order('accounts.surname') }, through: :assignments