实现validates_uniqueness_of:attr作为基本错误

时间:2013-09-16 10:18:37

标签: ruby-on-rails ruby-on-rails-3 validation

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

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

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

1 个答案:

答案 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