Rails Model.save获取datetime转换错误:“一个转换器,它是一个转发错误的转发错误:”

时间:2011-12-15 22:42:59

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

我遇到了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。

2 个答案:

答案 0 :(得分:3)

它很简单...只需在config / initializer下创建一个你想要的名字的文件,我就使用datetime_format.rb。有了这条线:

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

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

答案 1 :(得分:0)

刚刚找到解决方案:

我创建了一个名为&#34; sqlserver_dateformat.rb&#34;的文件。在Rails&#39; lib /文件夹并添加了这个:

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

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