我遇到了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。
答案 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
我知道,它是一个猴子补丁,但是嘿,它有效! =]