rescue_from был немного сломан, когда вышел Rails 3 (все еще сломан в 3.1 тоже).В основном вы не можете:
rescue_from ActionController::RoutingError
больше.См. здесь .
На данный момент решение - это то, что рекомендует Hamiltop.Используйте перехват всех маршрутов, которые идут к вашему маршруту "ошибки маршрутизации"Обязательно поместите его в конец файла config \ rout.rb, чтобы он обрабатывался последним.
# Any routes that aren't defined above here go to the 404
match "*a", :to => "application#routing_error"
def routing_error
render "404", :status => 404
end
Примечание: Этот метод имеет один существенный недостаток.Если вы используете такой движок, как Jammit или Devise, то поймать все, что будет направлено, заставит Rails игнорировать маршруты движка.
Если вы не используете движок с собственными маршрутами, тогда у вас все будет хорошо.Однако, если вы используете движок, который определяет свои собственные маршруты, смотрите ответ @ arikfr.