alias_method_chain 已弃用 - Rails 5 升级

alias_method_chain is deprecated - Rails 5 upgrade

我正在更新我的 rails 应用程序,我需要重构使用 alias_method_chain 的方法,因为它已被弃用。该消息说要按照 Rails 5 的建议使用 module#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 或其他方式进行重构,请告诉我,谢谢!

这对我有用。我不知道他们为什么一开始就使用 alias_method_chain 但这摆脱了具有相同功能的弃用警告。

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

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

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