Rails Model.save получает ошибку преобразования даты и времени: "Разговор о типах дел, о том, как мы ..." - PullRequest
0 голосов
/ 16 декабря 2011

У меня проблема с SQL Server и Rails.

Rails и SQL Server, похоже, по-разному сохраняют формат даты:

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

Поскольку я использую SQL Server на бразильском португальском языке, моя проблема может существовать только для бразильцев.

Всякий раз, когда я делаю любой Model.save на Rails, я получаю эту ошибку:

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 вставляет / обновляет столбцы create_at и updated_at, я всегда получаю эту ошибку.

Кто-нибудь знает, как это решить?

Я использую jRuby на activerecord-jdbcmssql-адаптере.

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

это очень просто ... просто создайте файл в config / initializer с нужным именем, я использую datetime_format.rb. С этой строкой:

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

Это перезапишет формат даты и времени по умолчанию для БД.

0 голосов
/ 16 декабря 2011

Только что нашел решение:

Я создал файл с именем "sqlserver_dateformat.rb" в папке lib / папки Rails и добавил следующее:

class ActiveRecord::Base
  before_save :set_sqlserver_dateformat

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

Теперь на каждой модели I 'нам нужно это:

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

Я знаю, это патч обезьяны, но эй, он работает!=]

...