我在模型中有一個before_validation
。其目的是計算兩個DateTime
對象之間的工作時間,並將該值插入time_worked
屬性。它的成功取決於兩個領域的有效性,並且它揭示了第三個領域的價值,而第三個領域又具有驗證。在其他驗證之間執行before_validation?
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
方法會失敗,這就是爲什麼這兩個領域都有驗證!
任何想法如何重構?