如何编写依赖于类的多个属性的Ruby on Rails验证?

时间:2011-05-04 19:43:19

标签: ruby-on-rails-3 validation

假设我有一个包含3个属性的模型类。我想确保三者中至少有一人在场。

我是否必须为此编写自定义验证?或者有一种方法可以使用现有的验证助手吗?

2 个答案:

答案 0 :(得分:3)

您需要为此编写自定义验证程序。您需要做的只是子类ActiveModel::Validator并实现一个validate(record)方法,如果发生错误,该方法会添加到记录的errors哈希:

class YourValidator < ActiveModel::Validator
    def validate(record)
        if (your_failure_condition_here)
            record.errors[:base] << "Your error message"
        end
    end
end

然后在模型中使用验证器(假设您已正确加载验证器类):

class YourModel
    validates_with YourValidator
end

答案 1 :(得分:2)

在我看来,模型中的自定义验证将是最干净的方式:

class Model
  validate :at_least_one_present

  def at_least_one_present
    if(they_dont_exist)
      errors.add("need at least one of these fields")
    end
  end
end

参考:Creating custom validation methods