【问题标题】:Rails ActiveRecord, INSERT default field value in PostgresRails ActiveRecord,在 Postgres 中插入默认字段值
【发布时间】:2013-02-28 18:12:54
【问题描述】:

这应该很容易,但我已经用谷歌搜索了很多。

我正在尝试为我的 rails 应用程序创建数据库日志。日志是一个 postgres 表,它有一个 timestamp 字段,我给出了 DEFAULTcurrent_timestamp。这在原始 SQL 中完美运行,如果我将 timestamp 字段从 INSERT 查询中排除,它会正确获取当前时间戳。

我有在轨道上;

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

(LogTable 扩展 ActiveRecord::Base)

这会导致 INSERT 查询包含 所有 字段,包括设置为 NULLtimestamp 字段,这是数据库不允许的,因此会出错。

我尝试设置:timestamp => 'current_timestamp':timestamp => 'DEFAULT',但最终都尝试将其设置为NULL

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord


    【解决方案1】:

    您的 current_timestamp 只是当前日期/时间吗?如果是这样,您可以保持简单并执行以下操作:

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

    如果它更复杂,并且您真的想使用 DB 端默认值,此页面可能会有所帮助:http://drawohara.com/post/6677354/rails-activerecord-default-values

    【讨论】:

    • 我认为这行不通,因为该字段实际上是一个 postgres DATETIME_WITH_TIMEZONE 字段,而不仅仅是一个简单的 unix 时间戳。我要到明天早上才能检查,但感谢您的意见。
    • 应该可以工作,因为它与我从这里推断的基本相同:stackoverflow.com/questions/9571392/…。您可能需要做Time.zone.now 而不是Time.now,尽管我怀疑(如果我理解正确的话,无论如何都会转换为UTC)。你仍然可能需要试验。
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2012-07-23
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多