如何在使用`validate`方法时跳过验证?

时间:2012-12-14 21:29:12

标签: ruby-on-rails ruby ruby-on-rails-3 validation skip

我正在使用Ruby on Rails 3.2.9。我实现了custom validator,我想在使用validate方法时跳过验证(在迁移文件中创建新对象)。一般情况下,我可以使用:without_protection => true作为create!方法的参数,但在我的情况下(请参阅下面的代码),它似乎不起作用:不会跳过验证。

class Article < ActiveRecord::Base
  validate do
    # custom validation code
  end
end

如何跳过验证?

2 个答案:

答案 0 :(得分:1)

您必须确保禁用所有其他验证才能使其生效。 ActiveRecord不能有选择地禁用验证,但可以完全省略它们。

例如:

class Article < ActiveRecord::Base
  validate :something,
    :if => :validations_are_turned_on?

  validate :always

protected
  def validations_are_turned_on?
    !@validations_disabled
  end
end

使用适当的:if条件标记任何非基本验证都应该有效。在这种情况下,如果未设置@validations_disabled,则将运行所有验证。

答案 1 :(得分:1)

如果没有保护关闭验证,它允许您批量分配受保护的属性。要保存而不验证:

new_record = Article.new
new_record.save(:validate => false)