在读完(几乎)所有互联网后,我需要你输入这个问题。
上下文 我有non persisted Rails 4 model使用ActiveModel::Model根据其文档包含ActiveModel::Validations
代码:
class GoodnessValidator < ActiveModel::Validator
def validate(record)
if record.first_name == "Evil"
record.errors[:base] << "This person is evil"
end
end
end
class Person
include ActiveModel::Model
include ActiveModel::Validations
validates_with GoodnessValidator
attr_accessor :first_name
end
问题:
当我创建一个新的Person
作为p = Person.new(first_name: 'Evil')
时,应该验证这是一个“邪恶的人”。所以,我希望像p.errors
这样的错误访问器应该返回Hash
并包含所有错误。
但是,总是空的,p.errors
不会返回任何内容。决不。
[102] pry(main)> p = Person.new(first_name: 'Evil')
=> #<Person:0x007fa0925809f0 @first_name="Evil">
[103] pry(main)> p.errors
=> #<ActiveModel::Errors:0x007fa09173ac88 @base=#<Person:0x007fa0925809f0 @errors=#<ActiveModel::Errors:0x007fa09173ac88 ...>, @first_name="Evil">, @messages={}>
[104] pry(main)> p.errors.full_messages
=> []
[105] pry(main)>
答案 0 :(得分:2)
保存模型时通常会触发验证。在您的情况下,您需要手动运行它们,然后检查错误:
p = Person.new(first_name: 'Evil')
unless p.valid? # runs the validations
puts inspect p.errors
end