Rails / Active Record“ArgumentError:参数超出范围” - 表示“时间”字段超过24小时

时间:2012-02-03 16:08:55

标签: mysql ruby-on-rails activerecord

我正在使用遗留数据库,该数据库不使用很好的约定,但我无法更改任何架构。

出现的一个问题是,对于某些时间字段,值大于24小时,如:33:06:46。这给了我一个:ArgumentError: argument out of range

这个问题已被问到before,但没有一个令人满意的答案。提问者最终说他使用的是DataMapper,这是我想要避免的。

有没有人对此有任何想法?我是否可以将Rails视为日期时间字段而不是时间字段而不更改实际架构?

谢谢!

Thariq

1 个答案:

答案 0 :(得分:1)

不确定这是最好的方式,但是:

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

因此,您可以根据时间格式修补此方法