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

この警告メッセージは、古いRails2アプリケーションをアップグレードした場合に発生する可能性があります。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 に答える