2013-07-27 24 views
1

如果我做一個模型,並創建一個字段,如「名」與Timestamp一起,這將等同於通過諸如查詢手動創建一個時間戳:是否等同於PostgreSQL時間戳的ruby的Timestamp類?

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

換句話說,如果我處理使用預先創建時間戳的數據庫,如何創建模型以匹配預先存在的記錄?

我想這很重要,這樣我就可以在沒有任何突發事件的情況下進行ActiveRecord查詢。

回答

1

ActiveRecord會理解模式的timestamp部分,因此您應該從數據庫中獲得ActiveSupport::TimeWithZone,就像您在其他任何timestamp列中獲得的一樣。然而,AR不會理解default current_timestamp,因此它會將您的created列設置爲NULL(或者在Ruby land中爲nil),並且default current_timestamp將不會被觸發;我通常會用after_initialize鉤子來解決這個問題:

after_initialize :set_defaults, :if => :new_record? 
#... 
def set_defaults 
    self.created = Time.now 
end 
相關問題