Rails validates_with错误::属性不能为空

时间:2011-09-26 22:01:34

标签: ruby-on-rails

我正在尝试对某些代码使用validates_with验证,以确保两个标志不同时为真:

validates_with ConfirmationValidator

class ConfirmationValidator < ActiveModel::Validator
  def validate(record)
    if record.confirmed_good && record.confirmed_bad
      record.errors[:base] << "Record is both confirmed and confirmed_bad"
    end
  end
end

但是尝试使用它会出现以下错误:

gems/activemodel-3.0.7/lib/active_model/validator.rb:142:in `initialize': :attributes cannot be blank (RuntimeError)

查看该文件使得看起来这是由于某些问题传递选项,但我仍然无法确定出现了什么问题。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

正如@Gazler指出的那样,您的错误实际上映射到了EveryValiator初始化问题。我遇到了同样的问题。

我正在使用ActiveModel 3.0.9运行rails 3.0.9,与你似乎运行的堆栈不完全相同。我刚开始使用自定义验证器。我有一个ActiveModel :: EachValidator,不是你的代码示例所说的。 EachValidator需要在选项中作为数组传递给validates_with的属性,例如

class Something < ActiveRecord::Base
  validates_with GenericValidator, :attributes=>[:name, :image]
end

答案 1 :(得分:0)

如果您将验证程序命名为Rails验证程序的名称,则会发生这种情况。例如,命名验证器:

PresenceValidator会导致此异常。