编写Rails应用程序。我想在我的模型中提供一些更常用的验证。我了解如何进行内置验证,以及如何编写自己的自定义方法。但是,我发现我在几个地方使用了相同的验证,并且在不同的类上使用mixins感到很尴尬。

这是一个示例:我有一个对象,带有prop1和prop2。两者均有效,但同时设置两者均无效。 现在,我有类似的东西

class MyClass < ActiveRecord::Base
  attr_accessor :prop1, :prop2
  validate :prop1_prop2_mutex

  def prop1_prop2_mutex
     errors.add(:base, "Can not set prop1 and prop2") if prop1 && prop2
  end
end

我真正想要的是
class MyClass < ActiveRecord::Base
  attr_accessor :prop1, :prop2
  validate_mutex :prop1, :prop2
end

然后我猜在其他地方我需要
  def validate_mutex(property1, property2)
    rrors.add(:base, "Can not set prop1 and prop2") if self.send(property1) && self.send(property2)
  end

那可能还没有那么接近。

那么,如何构建新的可重用验证方法?
还是有更好的方法来解决此问题?


请一般。我有几种不同形式的此问题的实例。尽管我希望为该示例提供一个 super 简单的内置解决方案,但我还是想将解决方案应用到更复杂的验证中。

最佳答案

您可以使用custom validators API执行以下操作:

validate :mutex => :prop1

10-07 14:08