【问题标题】:Inserting DATETIME with ActiveRecord and MySQL使用 ActiveRecord 和 MySQL 插入 DATETIME
【发布时间】:2010-10-02 13:11:21
【问题描述】:

我在 ActiveRecord 根据文档插入 DATETIME 时遇到问题; “如果表中包含名为 created_at/created_on 或 updated_at/updated_on 的字段,Active Record 会自动为创建和更新操作添加时间戳。”我有一个名为 created_at 的列,但 ActiveRecord 没有插入 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

谢谢。

【问题讨论】:

    标签: mysql ruby datetime activerecord


    【解决方案1】:

    您有一个 created_at 列,但 ActiveRecord 没有创建时间戳? created_at 列的列类型是什么?也许您可以向我们展示您的迁移?

    另外,如果你告诉 Rails 使用 UTC(我认为是 2.2 的默认值),无论服务器语言环境如何,时间值都是正确的。

    最后:您可以只传递时间/日期/日期时间实例,而不必自己格式化。例如。 YourModel.create(:a_time_column => Time.now)

    【讨论】:

    • 出于某种原因,我在做 CallLog.callstart = Date.new。将值设置为 0000-00-00 00:00:00。根据这个答案,我将其更改为 CallLog.callstart = Time.now,我现在感觉好多了。
    【解决方案2】:

    如果 created_at 字段类型为TimeStamp,则可以使用函数CURRENT_TIMESTAMP() 设置该字段的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多