猴子修补ActionDispatch :: Routing :: PolymorphicRoutes polymorphic_path导致堆栈级别太深

时间:2017-09-28 09:13:38

标签: ruby-on-rails path polymorphism monkeypatching actiondispatch

我修改了polymorphic_path方法,因为只要语言环境与默认语言环境相同,我就想添加一个nil语言环境。

方法如下:

module ActionDispatch
    module Routing
        module PolymorphicRoutes
            alias_method :old_polymorphic_path, :polymorphic_path
            def polymorphic_path(record_or_hash_or_array, options = {})
                opt = options.clone
                if I18n.locale == I18n.default_locale
                    opt = opt.merge({locale: nil})
                end
                old_polymorphic_path(record_or_hash_or_array, opt)
            end
        end
    end
end

除非我在任何给定的控制器或帮助器中调用一个新的polymophic_path实例,否则一切都像魅力一样。然后更改服务器崩溃的参数“堆栈级别太深。

它正在调用“old_polymorphic_path(record_or_hash_or_array,opt)”一百万次。但是,这在视图中不会发生。

这是修补方法的正确方法吗?是什么导致了这种“堆栈级太深”错误以及如何修复它?

0 个答案:

没有答案