0

私は次のモデルを持っているとしましょう:

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)

ただし、これは依然として、その日付範囲にシフトがある従業員を返すだけです。また、その日付範囲にシフトのない従業員も返したいと考えています。

このようなクエリはどのように機能しますか?

4

2 に答える 2

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)
于 2012-07-13T11:59:37.300 に答える
1

あなたはそれをしようとすることができます

LEFT OUTER JOIN shifts ON employees.id = shifts.employee_id AND shifts.starts_at BETWEEN weekBegin and weekEnd
于 2012-07-13T11:44:11.190 に答える