Как спасти от RoutingError
в рельсах 3.1 приложения. Если я ошибаюсь, в контроллере приложений можно было использовать rescue_from RoutingError
, но теперь это невозможно.Спасение от рельсов ошибки маршрутизации 3.1
ответ
Нет никакого способа справиться с этим, но есть несколько обходных решений. Обсуждение here дает следующее предложение:
Маршруты
добавьте следующую строку в файл маршрутов:
match "*", :to => "home#routing_error"
и обрабатывать ошибки в этом действии:
def routing_error
render text: "Not found, sorry", status: :not_found
end
Я не смог воспроизвести @ matthew-savage's r esults. Тем не менее, за рельсы руководства по route globbing и this question на другом StackOverflow вопрос, я решил эту проблему следующим образом:
routes.rb
match "*gibberish", :to => "home#routing_error"
уведомления, как я включил в текст после подстановки. Контроллер прекрасно, как показано выше:
Контроллер/home_controller.rb
....
def routing_error
render text: "Not found, sorry", status: :not_found
end
Хорошее example.
route.rb
Рельсы 3:
match '*unmatched_route', :to => 'application#raise_not_found!'
рельсы 4:
get '*unmatched_route' => 'application#raise_not_found!'
application_controller.rb
def raise_not_found!
raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}")
end
Более технически правильный ответ будет 'визуализации текста: "Не найдено, извините", состояние:: not_found, content_type: Mime :: HTML' правильно обрабатывать ответы типа'/icon.png' – kizzx2
Infact, решение от @aboutaaron работало для меня. Просто «*» в шаблоне маршрута не работал. Нужно добавить CRAP :) –