我使用的是一个遗留数据库,它不使用很好的约定,但我无法更改任何模式。
出现的一个问题是,对于某些时间字段,其值大于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
因此,您可以为时间格式修补此方法