ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ: Возврат объекта # устарел в пользу объекта # tap

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

DEPRECATION WARNING: Object#returning has been deprecated in favor of Object#tap. (called from full_messages at /Users/millisami/apps/pandahr/config/initializers/fix_active_model_full_message.rb:17) :

ActiveModel::Errors.class_eval do
  # Remove complicated logic
  def full_messages
    returning full_messages = [] do
      self.each_key do |attr|
        self[attr].each do |msg|
          full_messages << msg if msg 
        end 
      end 
    end 
  end 
end 

Ответ 1

В общем случае вы можете заменить строку returning на этот вызов на tap:

[].tap do |full_messages|

Однако ваш метод выглядит как эквивалент values.compact, поэтому вы можете просто заменить его на это.

Ответ 2

Это предупреждение может появиться, если вы обновите старые приложения Rails 2. Поскольку Rails Version 2.3.9, функция возврата ядра # была заменена ссылкой на объект #, которая является родной для Ruby 1.8.7. К сожалению, эта ошибка часто вызвана более старыми плагинами и драгоценными камнями. Для меня это помогло обновить версию haml от 2.0.x до 3.0.21, а версию will_paginate от 2.2.x до 2.3.15.