gpt4 book ai didi

ruby-on-rails - 使用带有 glob 路由的引擎时如何覆盖 Rails 3.1 "Routing Error"?

转载 作者:行者123 更新时间:2023-12-04 06:16:59 25 4
gpt4 key购买 nike

我正在将旧版应用程序转换为 Rails 3.1。新应用使用了一个提供全局路由的引擎:

# myengine/config/routes.rb
Rails.application.routes.draw do
match 'foo/bar/*path' => 'myengine/foobar#index', :format => false
end

遗留应用程序使用最终包罗万象的通配符路由来为其他不匹配的路由提供自定义处理(而不是熟悉的 Rails“路由错误”页面):

# myapp/config/routes.rb
Myapp::application.routes.draw do
# ...
match '*path' => 'failures#index', :format => false
end

这条包罗万象的路线以某种方式干扰了引擎的路线。如果我注释掉应用程序的 catchall 路线,引擎的路线工作正常。但是,如果我将它留在引擎路由中,则永远不会匹配,而是使用应用程序到 failures#index 的 catchall 路由:

Started GET "/foo/bar//projects/x/vol1/prod22/9907042031/9907042031.aff/ImageProperties.xml" for 10.71.1.136 at 2011-08-02 15:46:48 -0700
Processing by FailuresController#index as JS
Parameters: {"path"=>"foo/bar/projects/x/vol1/prod22/9907042031/9907042031.aff/ImageProperties.xml"}
Rendered failures/index.html.erb within layouts/application (0.0ms)
Completed 200 OK in 47ms (Views: 46.9ms)

如何在不破坏引擎路由的情况下覆盖默认的 Rails 3.1 路由错误处理程序?

最佳答案

处理此问题的正确方法曾经是 rescue_from 和自定义错误处理程序,而不是使用引擎敌对的 catchall 路由。然而,custom error handlers are no longer supported in Rails 3.1并且这可能要到 Rails 3.2 才会被修复,如果有的话。如果您需要自定义错误处理并且使用带路由的引擎,vidibus-routing_error gem 提供了一种解决方法。

另一种选择是将您的自定义错误处理程序放入堆栈底部的 Rack 端点。

关于ruby-on-rails - 使用带有 glob 路由的引擎时如何覆盖 Rails 3.1 "Routing Error"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com