Cet article est la suite de l'article suivant Faisons un écran d'erreur avec Rails
La méthode de classe rescue_from sert à intercepter les exceptions qui se produisent dans une action, elle ne peut donc pas intercepter le traitement qui se produit à l'étape du routage.
Vous devez donc créer un fichier dans le répertoire config / initializers.
L'action à appeler est triée en fonction de la valeur de request.path_info.
404 => action not_found 422 => unprocessable_entity Autre => erreur_serveur_interne
Après cela, l'action est passée comme argument à ErrorsController et appelée.
exceptions_app.rb
Rails.application.configure do
  config.exceptions_app = ->(env) do
    request = ActionDispatch::Request.new(env)
    
    action =
      case request.path_info
      when "/404"; :not_found
      when "/422"; :unprocessable_entity
      else; :internal_server_error
      end
    ErrorsController.action(action).call(env)
  end
end
Le contrôleur ressemble à ceci: La vue à afficher par rendu est spécifiée pour chaque action.
errors_controller.rb
class ErrorsController < ApplicationController
  def not_found
    render status: 404
  end
  
  def unprocessable_entity
    render status: 422
  end
  def internal_server_error
    render status: 500
  end
end
Il y a donc aussi des erreurs de routage qui ne peuvent pas être détectées par rescue_from J'ai pu gérer l'erreur et afficher l'écran comme décrit ci-dessus.
C'est tout pour aujourd'hui.
** 80 jours pour devenir un ingénieur à part entière **
Recommended Posts