ПРЕДУПРЕЖДЕНИЕ О УСТАРЕВАНИИ: возврат объекта № устарел в пользу объекта № - PullRequest
10 голосов
/ 17 января 2011

Как изменить следующий метод для использования 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 

Ответы [ 2 ]

14 голосов
/ 17 января 2011

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

[].tap do |full_messages|

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

3 голосов
/ 25 января 2013

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

...