iKapex
@iKapex

Как сохранить в модели с типом Time время учитывая часовой пояс?

Есть поле в модели, имеющее тип datetime. Время пользователь выбирает. И всегда либо +3 часа, либо - 3 часа. Пробовала в before_create устанавливать время этому полю in_time_zone('Moscow'), в application.rb пробовала писать config.active_record.default_timezone = 'Moscow' или 'UTC'; config.time_zone = 'Moscow' или 'UTC' . И вообще все стирала в application.rb связанное со временем. Но никак нормальное время установить не могу.
Всем спасибо.
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
shaks
@shaks
iKapex
Вот чё делать?

Снимать трусы и бегать :)

Да. действительно. Побаловался в консоли, узрел такое поведение.
h_1497531911_1753289_fae2be68da.png
Так происходит потому что:
Active Record keeps all the datetime and time columns timezone aware. By default, these values are stored in the database as UTC and converted back to the current Time.zone when pulled from the database.


Данное поведение фиксится достаточно просто.
# config/application.rb
..........
config.active_record.time_zone_aware_attributes = false


Результат:h_1497532143_2268431_bf18b998c8.png

Подробнее тут api.rubyonrails.org/classes/ActiveRecord/Timestamp.html

P.S. но я бы советовал оставить это поведение, т.к. это правильно. И выставить в настройках
#config/application.rb
config.active_record.default_timezone = :local

Таким образом, AR будет конвертить обратно в локальный часовой пояс. А т.к. у тебя он выставлен небыл, то он оставлял UTC
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы