Active Record Timestamp¶ ↑
如果表中有名为 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