2013-02-28 65 views
1

這應該是一個簡單的方法,但我已經在Google上搜索了一些。Rails ActiveRecord,Postgres中的INSERT默認字段值

我想爲我的rails應用程序創建一個數據庫日誌。日誌是一個postgres表,其中有一個timestamp字段,我給出DEFAULTcurrent_timestamp。如果我將timestamp字段從我的INSERT查詢中刪除,它將在原始SQL中完美工作,它會正確獲取當前時間戳。

在鐵軌上,我有;

entry = LogTable.new :fieldA => 'valA', :fieldB => 'valB' 
entry.save 

(LogTable延伸的ActiveRecord :: Base)中

導致包含所有領域,包括timestamp字段設置爲NULL,這是不是數據庫所允許的INSERT查詢,以便它錯誤。

我試過設置:timestamp => 'current_timestamp':timestamp => 'DEFAULT',但最終都試圖將其設置爲NULL

回答

1

你的current_timestamp只是當前的日期/時間嗎?如果是這樣,你可以保持簡單,做這樣的事情:

entry = LogTable.new :fieldA => 'valA', :fieldB => 'valB', :timestamp => Time.now 

如果是更復雜的東西,你真的希望使用DB-方違約,此頁可能幫助:http://drawohara.com/post/6677354/rails-activerecord-default-values

+0

我認爲這是行不通的,因爲這個字段實際上是一個postgres'DATETIME_WITH_TIMEZONE'字段,而不僅僅是一個簡單的unix時間戳。我無法檢查,直到明天早晨,但感謝您的意見。 – lynks 2013-02-28 19:33:50

+0

應該可以工作,因爲它基本上與我從這裏推斷的一樣:http://stackoverflow.com/questions/9571392/ignoring-timezones-altogether-in-rails-and-postgresql/9576170#9576170。你可能需要做'Time.zone.now'而不是'Time.now',儘管我懷疑(如果我理解的話,將會被轉換爲UTC)。你仍然需要嘗試。 – moonfly 2013-02-28 19:44:30