弃用警告:已弃用Object#returns以支持Object#tap

时间:2011-01-17 09:18:32

标签: ruby-on-rails ruby 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 

2 个答案:

答案 0 :(得分:14)

通常,您可以使用returning

此次调用替换tap
[].tap do |full_messages|

但是,您的方法看起来相当于values.compact,因此您可以用它替换代码。

答案 1 :(得分:3)

如果升级旧的Rails 2应用程序,则会出现此警告消息。由于Rails Version 2.3.9 Kernel#returns函数已被替换为Ruby 1.8.7原生的Object#tap。不幸的是,此错误通常是由较旧的插件和宝石引起的。对我来说,它帮助将haml版本从2.0.x更新到3.0.21,并将will_paginate版本从2.2.x更新到2.3.15。