【问题标题】:Why can't I override #asset_path from ActionView?为什么我不能从 ActionView 覆盖 #asset_path?
【发布时间】:2021-06-24 03:53:06
【问题描述】:

我正在努力将应用程序升级到 Rails 5,如果 url 为 nil,#asset_path 现在会引发。我正在尝试用一个可以像 Rails 4 一样工作的版本对该方法进行修补,以便我可以通过测试。

我已经为此花费了几个小时,我快疯了。出于某种原因,无论我做什么,我都无法修补模块。我认为这个初始化程序会起作用:

module ActionView
  module Helpers
    module AssetUrlHelper
      alias asset_path_raise_on_nil asset_path

      def asset_path(source, options = {})
        return '' if source.nil?
        asset_path_raise_on_nil(source, options)
      end
    end
  end
end

我还尝试将我的方法放在另一个模块中,并将 includeing、prepending 和 appending 放入 ActionView::Helpers::AssetUrlHelperActionView::Helpers::AssetTagHelper

无论我做什么,我的方法都无法执行。我可以更改方法的唯一方法是 bundle open actionview 并更改实际方法。

【问题讨论】:

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


    【解决方案1】:

    我发现这是因为#asset_path 只是一个别名。我需要重写别名指向的方法:

    module ActionView
      module Helpers
        module AssetTagHelper
          alias_method :path_to_asset_raise_on_nil, :path_to_asset
    
          def path_to_asset(source, options = {})
            return '' if source.nil?
            path_to_asset_raise_on_nil(source, options)
          end
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多