2013-02-28 70 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