我修改了 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)”一百万次。但这不会发生在视图中。
这是猴子修补方法的正确方法吗?是什么导致此“堆栈级别太深”错误以及如何解决?