跳至内容 跳至搜索

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