1

我修改了 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)”一百万次。但这不会发生在视图中。

这是猴子修补方法的正确方法吗?是什么导致此“堆栈级别太深”错误以及如何解决?

4

0 回答 0