ruby的Timestamp类是否等同于PostgreSQL的时间戳?

时间:2013-07-27 00:19:50

标签: ruby-on-rails ruby postgresql activerecord heroku

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

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

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

我认为这很重要,这样我就可以在没有任何破坏的情况下进行ActiveRecord查询。

1 个答案:

答案 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