我有一个虚拟的属性,需要从表单字段一个时间范围,将其分解:错误不会阻止对象保存?
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