我需要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
然而,这个解决方案在我看来有点难看,我想要更干的东西。有可能吗?
我很感谢你的帮助!
答案 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