跳至内容 跳至搜索

Active Record 时间戳

如果表中有名为 created_at/created_onupdated_at/updated_on 的字段,Active Record 会自动对创建和更新操作进行时间戳标记。

可以通过设置来关闭时间戳标记

config.active_record.record_timestamps = false

默认情况下,时间戳标记为 UTC,但可以通过设置来使用本地时区

config.active_record.default_timezone = :local

Time 时区感知属性

Active Record 使所有 datetimetime 列都具有时区感知。默认情况下,这些值在数据库中存储为 UTC,并在从数据库中提取时转换回当前 Time.zone

可以通过设置来完全关闭此功能

config.active_record.time_zone_aware_attributes = false

你还可以指定仅 datetime 列应具有时区感知(而 time 不应具有时区感知),方法是设置

ActiveRecord::Base.time_zone_aware_types = [:datetime]

你还可以添加特定于数据库的时区感知类型。例如,对于 PostgreSQL

ActiveRecord::Base.time_zone_aware_types += [:tsrange, :tstzrange]

最后,你可以指示不应应用时区转换的模型的特定属性,例如通过设置

class Topic < ActiveRecord::Base
  self.skip_time_zone_conversion_for_attributes = [:written_on]
end