私はbefore_validation
モデルを持っています。その目的は、2 つのオブジェクト間の作業時間を計算し、その値を属性DateTime
に挿入することです。time_worked
その成功は 2 つのフィールドの有効性に依存し、3 番目のフィールドの値を吐き出し、それが検証されます。
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
場合、メソッドが失敗することです。これがまさに、これら 2 つのフィールドに検証がある理由です!start_time
end_time
リファクタリングする方法はありますか?