删除Rails 3.1中的活动记录错误

时间:2011-09-06 04:46:14

标签: ruby-on-rails ruby ruby-on-rails-3.1

我正在将应用程序从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_sizeimage_extension移动所有验证,但我不确定如何在Rails 3.1中执行此操作。有什么想法吗?

2 个答案:

答案 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

所以直接访问它应该是可接受的使用