Active Record 时间戳
如果表具有名为created_at/created_on
或 updated_at/updated_on
的字段,Active Record 会自动为创建和更新操作添加时间戳。
可以通过设置以下选项关闭时间戳功能
config.active_record.record_timestamps = false
时间戳默认使用 UTC,但可以通过设置以下选项使用本地时区
config.active_record.default_timezone = :local
Time
时区感知属性
Active Record 将所有 datetime
和 time
列保留为时区感知。默认情况下,这些值以 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