1

我有一个带有任务模型(标题:字符串,到期:日期时间)的简单 ToDo 应用程序。

我正在尝试使用 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

但它不起作用。我在互联网上找到的所有其他可能的解决方案也没有帮助。你能给我一些建议吗?这样做的正确方法是什么?提前致谢。

4

2 回答 2

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'
于 2013-05-03T18:25:14.037 回答
1

你为什么不直接使用validates_presence_of

class Task < ActiveRecord::Base
  validates_presence_of :title
  validates_presence_of :due
end
于 2013-05-03T18:22:35.900 回答