如果一个失败,Rails会跳过其他验证

时间:2015-12-11 16:48:48

标签: ruby-on-rails validation ruby-on-rails-4 activerecord

我需要Rails ActiveRecord验证的帮助。

我有一个模型,在不同的领域有一些验证:

class MyModel < ActiveRecord::Base
  validate :custom_validation
  validates :field1, :field2, presence: true
  validates :field3, uniqueness: true

  def custom_validation
   # if condition
   #   errors.add(:field4, 'error message')
   # end
  end
end

如果custom_validation失败,我需要在field1,field2,field3上跳过验证。 我知道我可以这样做只是为了对field1,field2和field3的验证添加条件:

validates: field1, field2, presence: true, if: custom_validation

然而,这个解决方案在我看来有点难看,我想要更干的东西。有可能吗?

我很感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

如果不覆盖内置的rails验证,我真的不知道如何做到这一点。关键是在加载类而不是在实例中声明验证。

在所有验证中使用if: :custom_validation的替代方法可能是覆盖valid?方法并删除其他键的错误:

def valid?
  super
  if errors.key?(:field4)
    errors.keys.each {|k| errors.delete(k) unless k == :field4 }
  end
  errors.any?
end