【问题标题】:Rails Model.save get datetime convertion error: "A conversão de um tipo de dados varchar em um tipo de dados..."Rails Model.save 获取日期时间转换错误:“A conversão de um tipo de dados varchar em um tipo de dados...”
【发布时间】:2011-12-15 22:42:59
【问题描述】:

我遇到了 SQL Server 和 Rails 的问题。

Rails 和 SQL Server 似乎以不同的方式保存日期格式:

Rails way:  2011-12-15
SQL Server: 15-12-2011

由于我在巴西葡萄牙语中运行 SQL Server,所以我的问题可能只存在于巴西人​​。

每当我在 Rails 上执行任何 Model.save 时,都会收到此错误:

A conversão de um tipo de dados varchar em um tipo de dados 
datetime resultou em um valor datetime fora do intervalo.:  <my query here>

当 Rails 插入/更新 created_at 和 updated_at 列时,我总是收到此错误。

有人知道怎么解决吗?

我在 activerecord-jdbcmssql-adapter 上运行 jRuby。

【问题讨论】:

    标签: ruby-on-rails sql-server jruby


    【解决方案1】:

    这很简单...只需在 config/initializer 下创建一个具有您想要的名称的文件,我使用 datetime_format.rb。用这一行:

    Time::DATE_FORMATS[:db]= '%d-%m-%Y %H:%M:%S'
    

    这将覆盖数据库的默认日期时间格式。

    【讨论】:

      【解决方案2】:

      刚刚找到解决办法:

      我在 Rails 的 lib/ 文件夹中创建了一个名为“sqlserver_dateformat.rb”的文件并添加了这个:

      class ActiveRecord::Base
        before_save :set_sqlserver_dateformat
      
        def set_sqlserver_dateformat
          ActiveRecord::Base.connection.exec_query("set DATEFORMAT ymd")
        end
      end
      

      现在每个型号我都需要它:

      require 'sqlserver_dateformat'
      class User < ActiveRecord::Base
          # ...
      end
      

      我知道,这是一个猴子补丁,但是,嘿,它有效! =]

      【讨论】:

        猜你喜欢
        • 2022-06-13
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2014-08-13
        • 1970-01-01
        • 2022-06-11
        • 1970-01-01
        相关资源
        最近更新 更多