Как обработать ошибку маршрутизации в Rails 4 с алхимическим гемом cms?
Итак, в нашем приложении на Rails 4.2 есть гем alchemy_cms, который требует, чтобы его маршруты были смонтированы последними в config/rout.rb.
SampleApp::Application.routes.draw do
#other routes for the rails app here
# :
# :
mount Alchemy::Engine => '/'
end
Мы получаем маршруты типа "/somehacker/routingurl", которые затем выпадают на обработку в Alchemy::Engine, что приводит к ошибке 500 по умолчанию. Если я хотел сделать пользовательскую ошибку 404, то правильный способ сделать это - создать пользовательскую страницу 404 и заставить Alchemy обработать перенаправление? В противном случае, поскольку документы Alchemy указывают, что это должен быть последний маршрут в config/rout.rb, не будет способа добавить универсальный маршрут для перенаправления на какую-то страницу с ошибкой, которую я предполагаю.
РЕДАКТИРОВАТЬ:
Одна из проблем заключается в том, что есть некоторые маршруты, которые похожи на недопустимый маршрут "somehacker" выше, которые действительно должны быть проанализированы механизмом маршрутизации Алхимии, например, "/en/us", где "en" - допустимая локаль. Вот почему я изначально решил поместить обработку маршрутов в файл маршрутов движка Alchemy.
1 ответ
Если вам трудно настроить и использовать гем Alchemy cms для перенаправления неизвестных маршрутов на пользовательскую страницу, вы можете использовать метод ниже, чтобы реализовать то же самое с небольшой настройкой кода, приведенной ниже:
Rails 4.XXX
1. Первый метод.
(rout.rb)
Вы все еще можете использовать простой get
перенаправить все неизвестные маршруты.
get '*path', to: 'home#index'
Если вы хотите обеспечить маршрутизацию для запросов POST и GET, вы все равно можете использовать match, но Rails хочет, чтобы вы указали метод запроса через via
,
match "*path" => "home#index", via: [:get, :post]
Помни что routes.rb
выполняется последовательно (соответствует первому маршруту, который соответствует предоставленной структуре пути), поэтому поместите подстановочный знак в нижней части совпадений.
Здесь вы можете заменить home#index на любой пользовательский путь, который вы определили в своем приложении, также обратите внимание, что важно сохранить этот код перенаправления только в нижней части route.rb.
2. Вы можете следовать приведенному ниже туториалу по той же проблеме в другом ракурсе, который можно найти.