Остановите время, по которому рельсы преобразуют время в UTC, перед тем, как пункт - Rails 5.2 - PullRequest
0 голосов
/ 11 мая 2018

Я работаю с приложением Rail 5.2, которое имеет дело с Location записями и связанными OpeningHour записями.Модель OpeningHour содержит поля day (enum), starts_at (время) и ends_at (время).

Когда я запускаю нижеприведенное, Rails конвертирует Time.now из местного часового пояса(+08: 00) к времени UTC до того, как он сравнил время с любым из OpeningHour записей.Поскольку поля starts_at и ends_at хранятся как времена без часовых поясов, часовые пояса, используемые в запросе, не совпадают.

Location.opening_hours.where("start_at <= ? AND ends_at >= ?", Time.now, Time.now).any?

Как лучше всего сказать Rails не преобразовывать в UTCвремя перед сравнением, поскольку время в базе данных уже в localtime?

Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 11 мая 2018

Если вы сконфигурировали свой местный часовой пояс в application.rb как config.time_zone = "My TimeZone", тогда вы можете использовать Time.zone.now, чтобы достичь времени в вашем местном часовом поясе:

Location.opening_hours.where("start_at <= ? AND ends_at >= ?", Time.zone.now, Time.zone.now).any?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...