Я конвертирую старое приложение в 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
Каким-то образом этот промежуточный маршрут мешает маршруту двигателя. Если я закомментирую маршрут приложения, маршрут двигателя работает нормально. Но если я оставлю его в движке, маршрут никогда не будет совпадать, и вместо него будет использован универсальный маршрут приложения к failures#index
:
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 по умолчанию, не нарушая маршрутов ядра?