2011-01-17 2 views
10

Как изменить следующий метод использовать tap остановить предупреждения какDeprecation ВНИМАНИЯ: Объект # возвращение устарели в пользу объекта # крана

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 

ответ

14

В общем, вы можете заменить returning линия с этим вызовом tap:

[].tap do |full_messages| 

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

3

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