如果我创建模型并创建一个类似“name”的字段以及Timestamp
,它将等同于通过以下查询手动创建的时间戳:
CREATE TABLE whatever (
name varchar(25)
created timestamp NULL DEFAULT CURRENT_TIMESTAMP
)
换句话说,如果我正在处理手工预先创建时间戳的数据库,如何创建模型以匹配预先存在的记录?
我认为这很重要,这样我就可以在没有任何破坏的情况下进行ActiveRecord查询。
答案 0 :(得分:1)
ActiveRecord将了解架构的timestamp
部分,因此您应该从数据库中获取ActiveSupport::TimeWithZone
,就像您使用任何其他timestamp
列一样。但是,AR无法理解default current_timestamp
,因此会将您的created
列设置为NULL
(或Ruby地区的nil
),default current_timestamp
永远不会触发;我通常使用after_initialize
钩子来解决这个问题:
after_initialize :set_defaults, :if => :new_record?
#...
def set_defaults
self.created = Time.now
end