Para criar paginas de erro 404 e 500 vamos primeiro adicionar o codigo no app/controllers/application_controller.rb
:
class ApplicationController < ActionController::Base
# ...
unless Rails.application.config.consider_all_requests_local
rescue_from Exception, with: lambda { |exception| render_error 500, exception }
rescue_from ActionController::RoutingError, ActionController::UnknownController, ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| render_error 404, exception }
end
private
def render_error(status, exception)
respond_to do |format|
format.html { render template: "errors/error_#{status}", layout: 'layouts/application', status: status }
format.all { render nothing: true, status: status }
end
end
# ...
end
Depois é necessario criar um controlador para mostrar essas páginas. Crie o controlador app/controllers/errors_controller.rb
:
class ErrorsController < ApplicationController
def error_404
@not_found_path = params[:not_found]
end
def error_500
end
end
Criei os templates para as duas páginas de erro em app/views/errors/
.
Por ultimo, adicione no fim do arquivo config/routes.rb
uma rota para o erro 404:
unless Rails.application.config.consider_all_requests_local
match '*not_found', to: 'errors#error_404'
end
Essas págians de erro vão apenas ser mostradas no ambiente de produção. Para testar no ambiente de desenvolvimento, retire o seguinte codigo do application_controller.rb
e do config/routes.rb
:
Rails.application.config.consider_all_requests_local