我想验证具有其他范围的属性,但是由于它们在此验证中具有相同的部分,因此我不希望将错误分配给任何一个属性(而是分配给基本错误)。
我想避免自定义验证,我正在寻找类似的东西:
validates_uniqueness_of :attr, scope: [:attr1, :attr2], as: :base
我想验证具有其他范围的属性,但是由于它们在此验证中具有相同的部分,因此我不希望将错误分配给任何一个属性(而是分配给基本错误)。
我想避免自定义验证,我正在寻找类似的东西:
validates_uniqueness_of :attr, scope: [:attr1, :attr2], as: :base
我认为如果: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