Почему объект ActiveRecord возвращает DateTime.now иначе, чем DateTime.now - PullRequest
1 голос
/ 27 февраля 2020

Скажем, у меня есть простая модель ActiveRecord с этой схемой примера:

  create_table "users", id: :serial do |t|
    t.datetime "updated_at"
  end

Когда я запускаю следующий код в консоли:

user = User.new
user.updated_at = DateTime.now
user.updated_at # => Thu, 27 Feb 2020 09:28:51 GMT +00:00

Мой вопрос: почему этот вывод отличается от нормального возвращаемого значения DateTime.now, которое равно

DateTime.now # => Thu, 27 Feb 2020 10:28:51 +0100

. Используется ли какой-либо сериализатор? Как я могу узнать больше об этом?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

AR updated_at / creation_at - атрибуты, учитывающие часовой пояс. Вы можете прочитать больше о них здесь:

https://api.rubyonrails.org/classes/ActiveRecord/Timestamp.html

Если вы, например, захватите запись пользователя и наберете time_zone_aware_types, вы получите типы столбцов с учетом часового пояса

user = User.first
user.time_zone_aware_types

=> [:datetime, :time]

Эти типы столбцов автоматически преобразуются в Time.zone при извлечении из базы данных, даже если они хранятся в UT C.

Разница с DateTime.now означает, что он не знает часовой пояс и просто возвращает время в UT C

0 голосов
/ 27 февраля 2020

добавьте ваш часовой пояс в config / application.rb внутри

class Application < Rails::Application

.......
# it will be like this
    config.time_zone = "Asia/Riyadh"
.....
end

...