Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在验证前销毁/放弃条目_Ruby On Rails_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 在验证前销毁/放弃条目

Ruby on rails 在验证前销毁/放弃条目,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我有一个带有任务模型的简单ToDo应用程序(标题:string,due:datetime) 我试图使用before_验证回调来阻止我的应用程序添加(或不验证)空任务,但不知道如何实现这一点。对我来说,在验证之前进行验证是很重要的,因为我需要在任务中使用一些验证规则 所以,这里我试着这样做: class Task < ActiveRecord::Base before_validation :remove_empty_tasks def remove_empty_tasks

我有一个带有任务模型的简单ToDo应用程序(标题:string,due:datetime)

我试图使用before_验证回调来阻止我的应用程序添加(或不验证)空任务,但不知道如何实现这一点。对我来说,在验证之前进行验证是很重要的,因为我需要在任务中使用一些验证规则

所以,这里我试着这样做:

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
类任务

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

您为什么不直接使用
验证
的存在

class Task < ActiveRecord::Base
  validates_presence_of :title
  validates_presence_of :due
end
类任务
您可以使用以下功能:

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

使用Rails 3-way:
验证:title,presence:true
;)嗯,我不能使用该解决方案,因为当我尝试保存任务时,它会返回一个验证错误(这是一个嵌套表单)。我不希望它以这种方式工作,我需要默默地删除空任务。@在这种情况下,mbajur只需忽略controllera验证中的无效任务,返回TRUE或FALSE,因此,不要使用
self.destroy
,只需执行
返回false
您是否在Project.rb中使用
接受
的嵌套属性?它有一个
拒绝\u if
选项。谢谢,这看起来很有希望,但不起作用。我的任务仍保存到数据库中。
 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'