我正在将应用程序从Rails 3.0升级到3.1,并在我的测试中发现以下错误:
NoMethodError: undefined method `delete' for #<ActiveModel::Errors:0x007f928c0ee310>
我有以下代码移动错误:
after_validation do
self.errors[:image_size].each do |message|
self.errors.add(:image, message)
end
self.errors[:image_extension].each do |message|
self.errors.add(:image, message)
end
self.errors.delete(:image_size)
self.errors.delete(:image_extension)
end
我仍然需要能够从image_size
和image_extension
移动所有验证,但我不确定如何在Rails 3.1中执行此操作。有什么想法吗?
答案 0 :(得分:8)
删除任何内容的唯一方法是clear
并删除所有内容,因此我认为您必须:
to_hash
)。self.errors.clear
清除所有错误。self.errors.add
将所有错误消息放回正确/所需的位置。答案 1 :(得分:6)
您可以直接修改errors对象的类似hash的消息属性,即可以这样做:
self.errors.messages.delete(:image_size)
这在文档中没有公开,但是查看ActiveModel::Errors
的实际代码,我们找到了为@messages定义的attr_reader:
attr_reader :messages
所以直接访问它应该是可接受的使用