У меня есть модель с расписанием has_one (от: datetime, from_a: datetime, to: datetime). Я хочу получить все модели, у которых есть расписание, соответствующее дате и времени выполнения запроса.
Например, у меня есть модель m с расписанием from: Sun, 15 октября 2018 г., 19:00:00 UTC +00:00, from_a: Вс, 14 октября 2018 г., 19:20:00 UTC +00:00 и до: Вс, 14 октября 2018 г., 20:00:00 UTC +00:00. Если текущее время Sun, 14 Oct 2018 19:14:00 UTC +00:00, то и я ищу только from, тогда я получу m, но если Текущее время: Sun, 14 Oct 2018 20:01:00 UTC +00:00 и я ищу только from и ничего не получаю.
Вот код, который я пробовал:
scope :s, ->(time, type) { unscoped.joins(:schedule).where("\"schedule.#{type.to_s}\" < ? AND \"schedule.to\" > ?", time, time) }
и когда я вызываю область действия, будет Model.s(DateTime.now, :from)
. Дело в том, что этот код не работает так, как предполагалось, поскольку он не дает ни правильного результата, ни результата, который я ожидаю.
ОБНОВЛЕНИЕ
Это сгенерированный запрос для Model.s(DateTime.now, :from)
SELECT "models".* FROM "models" INNER JOIN "schedules" ON "schedules"."model_id" = "models"."id" WHERE ("schedules.from" < '2018-10-15 19:59:33.737073' AND "schedules.to" > '2018-10-15 19:59:33.737073')