【问题标题】:How to skip validations when using the `validate` method?使用 `validate` 方法时如何跳过验证?
【发布时间】:2012-12-14 21:29:11
【问题描述】:

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

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

如何跳过验证?

【问题讨论】:

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


    【解决方案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 没有设置,那么所有的验证都会运行。

    【讨论】:

    • 在我的情况下(使用validate do ... end block)是否有某种方式可以避免声明方法名称(就像您使用:something 所做的那样)并应用:if“验证块”的条件?
    • 您始终可以使用块驱动的方法在线声明您的验证,但在我看来它确实会增加混乱。不过,不管对你有用。
    【解决方案2】:

    没有保护不会关闭验证,它允许您批量分配受保护的属性。无需验证即可保存:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多