如果某个条件为真,我该如何使用连接? 例如,我有这个查询:
@courses = Course.find(:all,
:order=> 'courses.name asc',
:include => [:units],
:joins => :course_sub_responsibles,
:group => 'courses.name',
:conditions => conditions)
但我只需要在某种情况下加入course_sub_responsibles表。
答案 0 :(得分:2)
您应该使用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
答案 1 :(得分:0)
ActiveRecord.find 方法将Hash作为最后一个参数(没有大括号,但确实是哈希),这意味着你可以这样做:
options = { :order=> 'courses.name asc',
:include => [:units],
:group => 'courses.name',
:conditions => conditions }
options[:join] = :course_sub_responsibles if YOUR CONDITION GOES HERE
@courses = Course.find(:all, options)