在验证之前销毁/丢弃条目

时间:2013-05-03 18:18:37

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个简单的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

但它不起作用。我在互联网上找到的所有其他可能的解决方案都没有帮助。你能告诉我一些正确的方法吗?提前谢谢。

2 个答案:

答案 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