我想验证具有其他范围的属性,但由于它们在此验证中都具有相同的部分,所以我不希望将错误分配给任何一个属性(但是基于错误)。
我想避免自定义验证,我寻找类似的东西:
validates_uniqueness_of :attr, scope: [:attr1, :attr2], as: :base
答案 0 :(得分:0)
我不认为在没有子类化或monkeypatching默认验证器的情况下向:base
添加错误是不可能的,这将比编写一些自定义验证要多得多:
validate :attr1_does_not_equal_attr2
def attr1_does_not_equal_attr2
errors.add(:base, 'attr1 should not equal attr2') if attr1 == attr2
end
假设您的validates_uniqueness_of
代码工作正常,但错误消息未附加到:base
。
写一个after_validation
,当在其中一个属性中检测到错误时设置基本错误,如(未经测试):
def after_validation
if errors[:attr] || errors[:attr1] || errors[:attr2]
errors.add(:base, 'Duplicate values detected')
end
end