我正在尝试对某些代码使用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)
查看该文件使得看起来这是由于某些问题传递选项,但我仍然无法确定出现了什么问题。有什么想法吗?
答案 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
会导致此异常。