Удалите ошибку активной записи в Rails 3.1 - PullRequest
6 голосов
/ 06 сентября 2011

Я обновляю приложение с 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. Есть идеи?

Ответы [ 2 ]

8 голосов
/ 06 сентября 2011

Единственный метод, который удаляет что-либо - это clear, а удаление удаляет все, поэтому я думаю, что вы должны:

  • Извлечь все сообщения об ошибках (возможно, используя to_hash).
  • Удалите все ошибки с помощью self.errors.clear.
  • Поместите все сообщения об ошибках обратно в нужные / нужные места, используя self.errors.add.
6 голосов
/ 16 декабря 2011

Вы можете напрямую изменить атрибут хеш-типа сообщений объекта ошибок, то есть вы можете сделать это:

self.errors.messages.delete(:image_size)

Это не раскрыто в документации, но, глядя на фактический код для ActiveModel::Errors, мы находим attr_reader, определенный для @messages:

attr_reader :messages

похоже, что прямой доступ к нему должен быть допустимым использованием

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...