1

如果我创建一个模型并创建一个像“name”这样的字段以及一个Timestamp,它是否等同于通过如下查询手动创建的时间戳:

CREATE TABLE whatever (
name varchar(25)
created timestamp NULL DEFAULT CURRENT_TIMESTAMP
)

换句话说,如果我正在处理一个手动预先创建时间戳的数据库,我如何创建一个模型来匹配预先存在的记录?

我想这很重要,这样我就可以在没有任何事情发生的情况下进行 ActiveRecord 查询。

4

1 回答 1

1

ActiveRecord 将理解timestamp架构的一部分,因此您应该ActiveSupport::TimeWithZone像使用任何其他timestamp列一样从数据库中取出。但是,AR 不会理解default current_timestamp,因此它将您的created列设置为NULL(或nil在 Ruby 领域)并且default current_timestamp永远不会触发;我通常用after_initialize钩子解决这个问题:

after_initialize :set_defaults, :if => :new_record?
#...
def set_defaults
    self.created = Time.now
end
于 2013-07-27T01:35:29.123 回答