您应该使用基于 ARel 的方法:
@courses = Course.scoped # Course.all in rails 4
@courses = @courses.order("courses.name asc").includes(:units)
@courses = @courses.joins(:course_sub_responsibles) if YOUR_CONDITION
@courses = @courses.group("courses.name")
@courses = @courses.where(conditions)
@courses
这只会在迭代变量时执行查询,但查询将由片段构建,因此您可以在需要时添加/删除片段。
在 Rails4 中它会更干净(注意刘海,这意味着像往常一样“修改接收器”):
@courses = Course.all
@courses.order!("courses.name asc")
@courses.includes!(:units)
@courses.joins!(:course_sub_responsibles) if YOUR_CONDITION
@courses.group!("courses.name")
@courses.where!(conditions)
@courses