0
發行來源:我有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
方法的功能。
我該怎麼辦?
不會''包括被越優選我需要找回帳戶數據幾乎每一次裝填回收? –
'includes'不會添加連接語句,並且您不能在查詢未返回的列上進行排序。您也可以在上面添加'includes',但是我的經驗是,默認預加載關聯結果很糟糕。 'includes'實際上是相當危險的,特別是當與同一個協會加入一起使用時,我最近就這個問題進行了一次談話:https://skillsmatter.com/skillscasts/6731-activerecord-vs-n-1 – BroiSatse
謝謝, 很有意思 –