1

我正在使用 Ruby on Rails 3.2.9。我实现了一个自定义验证器,我想在使用该validate方法时跳过验证(在迁移文件中创建新对象)。一般来说,我可以将:without_protection => true其用作方法的参数,create!但在我的情况下(参见下面的代码),它似乎不起作用:不会跳过验证。

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

如何跳过验证?

4

2 回答 2

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未设置,则所有验证都将运行。

于 2012-12-14T21:33:32.600 回答
1

没有保护不会关闭验证,它允许您批量分配受保护的属性。在不验证的情况下保存:

new_record = Article.new
new_record.save(:validate => false)
于 2012-12-15T02:39:45.577 回答