轨道/活动记录"ArgumentError: argument out of range" - 适用于大于 24 小时的"time"字段



我使用的是一个遗留数据库,它不使用很好的约定,但我无法更改任何模式。

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

这个问题以前有人问过,但没有一个令人满意的答案。询问者最终说他使用了DataMapper,这是我想避免的。

有人有抓到这个的想法吗?在不更改实际模式的情况下,我可以让Rails将其视为日期-时间字段而不是时间字段吗?

谢谢!

塔里克

但不确定这是最好的方法:

ActiveRecord使用ActiveSupport::TimeZone.parse方法解析这些值(gem/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

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

相关内容

最新更新