使用Ruby on Rails将时间插入时间列

jal*_*nge 5 time activerecord ruby-on-rails

我遇到了一个我认为是Active Records故障的问题.我正在解析包含作业的XML文件.此xml文件包含以时间格式00:00:00指示挂起时间的节点.我也有一个接受这些工作的模型.但是,当时间大于实际的24H时间时,Active记录将其插入为NULL.以下示例:

INSERT INTO `jobs` (`jobid`, `walltime`) VALUES('71413', 'NULL')

INSERT INTO `jobs` (`jobid`, `walltime`) VALUES('71413', '15:24:10')
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

And*_*ack 5

标准的 SQL timedatetime数据类型并不用于存储的持续时间.可能与这些标准一致,ActiveRecord的时间属性赋值逻辑使用本机Ruby Time类时间解析规则来拒绝无效的时间.

如您所愿,存储持续时间的方法是:

  1. 将持续时间存储为整数(例如"秒数"),或
  2. 存储两个(日期)时间,开始和结束,并对它们使用日期算术.
class Thing < ActiveRecord::Base
  ...
  def duration
    return start - end
  end

  def duration=(length)
    start = Time.now
    end = start + length
  end
  ...
end
Run Code Online (Sandbox Code Playgroud)