10

如何更改以下方法以用于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 
4

2 回答 2

14

一般来说,您可以returning用以下调用替换该行tap

[].tap do |full_messages|

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

于 2011-01-17T09:32:19.763 回答
3

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

于 2013-01-25T14:34:12.837 回答