Как рассчитывается create_at? - PullRequest
0 голосов
/ 29 августа 2018

Когда я создаю новый экземпляр ActiveRecord, отметка времени created_at сохраняется в базе данных.

  • Как рассчитывается эта метка времени?
  • Время основано на времени сервера?
  • Всегда ли время указано в часовом поясе UTC?
  • Есть ли где-нибудь документация по этому поводу?

1 Ответ

0 голосов
/ 29 августа 2018

Вот реализация метода _create_record из ActiveRecord:

def _create_record
  if record_timestamps
    current_time = current_time_from_proper_timezone

    all_timestamp_attributes_in_model.each do |column|
      if !attribute_present?(column)
        _write_attribute(column, current_time)
      end
    end
  end

  super
end

А вот реализация метода current_time_from_proper_timezone:

def current_time_from_proper_timezone
      default_timezone == :utc ? Time.now.utc : Time.now
end
  • В качестве временной отметки используется UTC по умолчанию (рассчитывается с использованием Time.now.utc), однако ее можно изменить в вашей конфигурации config.active_record.default_timezone = :local (В этом случае она будет рассчитываться с использованием Time.now)

  • Время зависит от вашего сервера

  • По умолчанию это UTC, но вы можете изменить его, установив config.active_record.default_timezone = :local

Если вы хотите взглянуть на код, вот ссылка: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/timestamp.rb

...