Rails / Active Record «ArgumentError: аргумент вне диапазона» - для полей «время» больше 24 часов - PullRequest
3 голосов
/ 03 февраля 2012

Я работаю с унаследованной базой данных, которая не использует большие соглашения, но я не могу изменить ни одну из схем.значения больше 24 часов, например: 33:06:46.Это дает мне: ArgumentError: argument out of range

Этот вопрос был задан до , но не дал удовлетворительного ответа.В конце концов, спрашивающий сказал, что он использовал DataMapper, чего я хотел бы избежать.

У кого-нибудь есть идеи, как это уловить?Могу ли я заставить Rails рассматривать его как поле даты-времени вместо поля времени без изменения фактической схемы?

Спасибо!

Thariq

1 Ответ

1 голос
/ 03 февраля 2012

Не уверен, что это лучший способ:

ActiveRecord использует метод ActiveSupport :: TimeZone.parse для анализа таких значений (gems ​​/ activesupport -?.?.? / Lib / active_support / values ​​/ time_zone.rb)

Все довольно просто:

def parse(str, now=now)
  date_parts = Date._parse(str)
  return if date_parts.blank?
  time = Time.parse(str, now) rescue DateTime.parse(str)
  if date_parts[:offset].nil?
    ActiveSupport::TimeWithZone.new(nil, self, time)
  else
    time.in_time_zone(self)
  end
end

Чтобы вы могли установить этот метод для своего формата времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...