Спасение 404 (обычно происходящее из ActiveRecord::RecordNotFound
) от вашего контроллера не всегда поможет, потому что есть также ошибки маршрутизации (ActionController::RoutingError
)
Чтобы представить исключения для вызовов пользовательских rails config.exceptions_app
,который по умолчанию равен ActionDispatch::PublicExceptions.new(Rails.public_path)
и просто отображает public/404.html
и т. д.
В большинстве случаев достаточно разместить там страницы с ошибками, но если вам абсолютно необходимо отобразить что-то динамическое - вы можете переопределить приложение исключений.
Один из распространенных способов взлома - перенаправить исключения обратно в ваши основные маршруты через config.exceptions_app = self.routes
и добавить обычные маршруты для их обработки:
get '/404', to: 'errors#not_found'
get '/422', to: 'errors#unacceptable'
get '/500', to: 'errors#server_error'
Но будьте осторожны, если уже есть исключение, вы можете получитьцикл исключения, поэтому лучше иметь отдельное приложение для обработки ошибок / механизм