我有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
问题是,如果其中一个为空或无效,我的方法calculate_time_worked
将失败,这正是这两个字段具有验证的原因!start_time
end_time
任何想法如何重构?