我有一个简单的ToDo应用程序,其中包含Task模型(title:string,due:datetime)。
我正在尝试使用before_validation回调来阻止我的应用添加(或不验证)空任务,但不知道如何实现这一点。对我来说,使用before_validation非常重要,因为我需要在我的任务中使用一些验证规则。
所以,我在这里尝试过这样做:
class Task < ActiveRecord::Base
before_validation :remove_empty_tasks
def remove_empty_tasks
if self.title.empty? && self.due.empty?
self.destroy
end
end
end
但它不起作用。我在互联网上找到的所有其他可能的解决方案都没有帮助。你能告诉我一些正确的方法吗?提前谢谢。
答案 0 :(得分:2)
您可以使用以下内容:
class Task < ActiveRecord::Base
before_validation :remove_empty_tasks
def remove_empty_tasks
if self.title.blank? && self.due.blank?
self.errors.add(:title, 'Should not be empty!')
end
end
end
使用此配置:
Task.create(title: '', due: Date.today)
#=> does not create the task (title is empty)
Task.create(title: 'Bonjour')
#=> does not create the task (due is nil)
Task.create(title: 'Aurevoir', due: Date.today)
#=> passes the custom validation 'remove_empty_tasks'
答案 1 :(得分:1)
为什么不使用validates_presence_of
?
class Task < ActiveRecord::Base
validates_presence_of :title
validates_presence_of :due
end