假设我有以下型号:
class Employee < ActiveRecord::Base
has_many :shifts
end
class Shift < ActiveRecord::Base
belongs_to :employee
end
在我的控制器中,我想加载所有员工,包括他们在特定日期范围内的班次。 但我也想在这个范围内包括没有任何变化的员工。
在我的控制器中,我试过了:
@employees.joins("LEFT OUTER JOIN shifts ON employees.id = shifts.employee_id").where('shifts.starts_at BETWEEN ? and ?', weekBegin, weekEnd).to_json(:include => :shifts)
但是这仍然只会让那些日期范围内的员工回归。我还希望让那些日期范围内没有班次的员工回归。
这样的查询是如何工作的?
答案 0 :(得分:4)
您应该在轮班开始时间中加入条件:
@employees.joins("
LEFT OUTER JOIN shifts
ON employees.id = shifts.employee_id
AND shifts.starts_at
BETWEEN #{ActiveRecord::Base.sanitize(weekBegin)}
AND #{ActiveRecord::Base.sanitize(weekEnd)}
").to_json(:include => :shifts)
答案 1 :(得分:1)
您可以尝试这样做
LEFT OUTER JOIN shifts ON employees.id = shifts.employee_id AND shifts.starts_at BETWEEN weekBegin and weekEnd