【问题标题】:Rails custom validation (reusable macro-style)Rails 自定义验证(可重用的宏样式)
【发布时间】:2011-03-13 17:04:46
【问题描述】:

编写 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

这可能不是那么接近。

那么,我该如何构建一种新的可重用验证方法呢?
或者有没有更好的方法来解决这个问题?

请笼统。我有几个不同形式的这个问题的例子。虽然我很欣赏这个例子的超级简单的内置解决方案,但我有更复杂的验证,我想应用这个解决方案。

【问题讨论】:

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


    【解决方案1】:

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

    validate :mutex => :prop1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多