【发布时间】:2012-06-24 02:36:06
【问题描述】:
我的模型中有一个before_validation。其目的是计算两个DateTime 对象之间的工作时间,并将该值插入time_worked 属性。它的成功取决于两个字段的有效性,它吐出第三个字段的值,而第三个字段又具有验证。
class TimeEntry < ActiveRecord::Base
validates :start_time, :end_time, :presence => true
validates :time_worked, :presence => true, :numericality => true
before_validation :calculate_time_worked
def calculate_time_worked
time_float = (Time.parse(self.end_time.to_s) - Time.parse(self.start_time.to_s)) / 1.hour
self.time_worked = ((time_float * 10).ceil).to_f/10
end
问题是如果start_time 或end_time 为空或无效,我的calculate_time_worked 方法将失败,这正是这两个字段具有验证的原因!
任何想法如何重构?
【问题讨论】: