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