alias_method_chain已弃用 - Rails 5升级

时间:2016-09-19 19:51:11

标签: ruby-on-rails module deprecated ruby-on-rails-5

我正在更新我的rails应用,我需要重构一个使用alias_method_chain的方法,因为它已被弃用。消息说按照Rails 5的建议使用模块#prepend。这是我试图重构的帮助器:

 module ActiveSupport
  module NumberHelper
    def number_to_delimited_with_unicode_infinity(number, options = {})
      result = number_to_delimited_without_unicode_infinity(number, options)
      result.sub(/^Infinity$/, "∞")
    end
    alias_method_chain :number_to_delimited, :unicode_infinity
  end
end

如果有人知道如何使用super或其他方式重构,请让我知道,谢谢!

2 个答案:

答案 0 :(得分:1)

这对我有用。我不知道为什么他们开始使用alias_method_chain但是这会消除具有相同功能的弃用警告。

module ActiveSupport
  module NumberHelper
    def number_to_delimited(number, options = {})
      number.to_s.sub(/^Infinity$/, "∞")
    end
  end
end

答案 1 :(得分:0)

在你的情况下,这个解决方案似乎没问题。如果你必须有一个参考原始方法的猴子补丁,那么你可以在修补之前创建一个别名:

module ActiveSupport
  module NumberHelper

    # create alias to original method
    alias :original_number_to_delimited :number_to_delimited

    def number_to_delimited(number, options = {})
      result = original_number_to_delimited(number, options)
      result.sub(/^Infinity$/, "∞")
    end
  end
end