我有一個虛擬的屬性,需要從表單字段一個時間範圍,將其分解:錯誤不會阻止對象保存?
def time_range=(time_range)
unless time_range.empty?
t = time_range.split(/to|\-/)
self.start_entry = t[0]
self.finish_entry = t[1]
if Chronic.parse(self.start_entry).nil? || Chronic.parse(self.finish_entry).nil?
errors.add(:time_range, 'Invalid time range entered')
end
end
end
start_entry
和finish_entry
也是因爲我有其他的方式來設置他們的虛擬屬性。無論兩人如何設置,我有以下鉤設置start
和finish
在我的數據庫:
before_save :set_start_and_finish
儘管我添加了錯誤事實,錯誤的對象仍設法節省:
> t = Tour.new
> t.time_range = "rubbish"
> t.errors
#=> {:time_range=>["Invalid time range entered"]}
> t.valid?
#=> true
如何使實例無效以防止以後保存?
有見地,謝謝!提出例外是一個很好的解決方案。 – Acco