2009-01-20 35 views
3

我遇到ActiveRecord根據文檔插入DATETIME的問題; 「如果表具有名爲created_at/created_on或updated_at/updated_on的字段,Active Record會自動創建時間戳並更新操作。」我有一個名爲created_at的列,但ActiveRecord沒有插入DATETIME。我的插入查詢如下所示:用ActiveRecord和MySQL插入DATETIME

def add_record(server_id, backup_type) 
    Record.create(:server_id => server_id, :backup_type => backup_type) 
end 

我知道我可以使用的東西插入時間像

:created_at => "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}" 

,我想遠離這種美麗的原因是由於服務器之間的時間差在當地和地理上都是如此。我想知道是否有辦法在相同的創建方法中運行該類型,例如:

def add_record(server_id, backup_type) 
    Record.create(:server_id => server_id, :backup_type => backup_type, created_at => DATETIME()) 
end 

謝謝。

回答

1

如果created_at字段類型爲TimeStamp,則可以使用函數CURRENT_TIMESTAMP()來設置該字段的值。

+0

Time.now不適合我,但是這樣做! – fatfrog 2012-11-02 23:12:05

3

你有一個created_at列,但ActiveRecord沒有創建一個時間戳?你的created_at列的列類型是什麼?也許你可以向我們展示你的遷移?另外,如果你告訴Rails使用UTC(2.2中的默認值,我認爲),那麼時間值將是正確的,而不管不同的服務器區域設置如何。

而且,最後:您可以只傳遞一個時間/日期/日期時間實例,您不必自己格式化它。例如。 YourModel.create(:a_time_column => Time.now)

+0

由於某種原因,我正在做CallLog.callstart = Date.new。將該值設置爲0000-00-00 00:00:00。基於這個答案,我將它改爲CallLog.callstart = Time.now,現在我感覺好多了。 – 2009-10-23 13:27:14