0

我想验证具有其他范围的属性,但是由于它们在此验证中具有相同的部分,因此我不希望将错误分配给任何一个属性(而是分配给基本错误)。

我想避免自定义验证,我正在寻找类似的东西:

validates_uniqueness_of :attr, scope: [:attr1, :attr2], as: :base
4

1 回答 1

0

我认为如果: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
于 2013-09-16T13:26:47.803 回答