У меня есть следующие модели в моем приложении Rails:AREL: Добавить дополнительные условия для внешнего соединения
class Shift < ActiveRecord::Base
has_many :schedules
scope :active, where(:active => true)
end
class Schedule < ActiveRecord::Base
belongs_to :shift
end
Я хочу, чтобы создать коллекцию всех активных сдвигов и нетерпеливых нагрузок любых связанные с графиками, которые имеют occurs_on
между два даты. Если сдвиг не имеет графиков между этими датами, он все равно должен быть возвращен в результатах.
По сути, я хочу, чтобы генерировать SQL эквивалент:
SELECT shifts.*, schedules.*
FROM shifts
LEFT JOIN schedules ON schedules.shift_id = shifts.id
AND schedules.occurs_on BETWEEN '01/01/2012' AND '01/31/2012'
WHERE shifts.active = 't';
Моя первая попытка была:
Shift.active.includes(:schedules).where("schedules.occurs_on BETWEEN '01/01/2012' AND '01/31/2012')
Проблема в том, что фильтрация occurs_on делается где положение, а не в соединение. Если сдвиг не имеет графиков в этот период, он не возвращается вообще.
Моя вторая попытка состояла в том, чтобы использовать метод joins
, но это делает внутреннее соединение. Опять же, это снизит все смены, у которых нет графиков для этого периода.
Я расстроен, потому что я знаю SQL, я хочу, чтобы AREL генерировал, но я не могу понять, как выразить его с помощью API. Кто угодно?