Où définir des types d'erreurs personnalisées en ruby et/ou rails ?

Créé le 12 Dec 2022 - Mis à jour le 04 Jul 2023 - Créé par Fabien Berthoux - ruby-on-railsruby

Il est possible de définir des types d'erreurs personnalisées en Ruby et/ou Rails, à l'aide de la méthode Class.new. Cette méthode permet de créer une classe de type d'erreur personnalisée et de définir les erreurs qui seront utilisées dans le code. La classe doit hériter de StandardError ou d'une autre classe d'erreur standard, et elle doit être déclarée dans un fichier Ruby. Elle peut ensuite être appelée à l'aide de la méthode raise ou de la méthode fail pour créer une erreur personnalisée. Une fois définie, la classe peut être utilisée pour vérifier si une erreur personnalisée est levée, pour capturer l'erreur et pour traiter l'erreur de manière appropriée.


Comment définir des erreurs personnalisées pour les contrôleurs Rails?

Il est possible de définir des erreurs personnalisées pour les contrôleurs Rails à l'aide de la méthode ActionController::Rescue. Cette méthode permet de définir des erreurs personnalisées pour les contrôleurs Rails. Les erreurs définies sont levées lorsque le contrôleur est appelé et peuvent être gérées par le contrôleur. Par exemple, pour définir une erreur personnalisée pour une action particulière, vous pouvez utiliser la méthode rescue_from comme ceci :

rescue_from SomeErrorClass, with: :handle_some_error

def handle_some_error
  # Traitement de l'erreur
end

Quel type de données peut être passé à une erreur personnalisée ?

Il est possible de passer des données à une erreur personnalisée, à l'aide de la méthode Exception.initialize. Cette méthode permet de passer à l'erreur personnalisée des informations supplémentaires, telles que des messages d'erreur, des codes d'erreur, des informations sur l'état de l'exécution et des informations sur l'utilisateur. Ces informations peuvent être passées à l'erreur lorsqu'elle est levée, et elle peut être récupérée et traitée par le code qui gère l'erreur.

def do_something
  raise MyError.new('Something went wrong!', code: 500, data: { user_id: 123 })
end

Quelle est la différence entre une erreur standard et une erreur personnalisée ?

La principale différence entre une erreur standard et une erreur personnalisée est que les erreurs personnalisées peuvent être définies pour spécifier des informations supplémentaires, telles que des messages d'erreur, des codes d'erreur, des informations sur l'état de l'exécution et des informations sur l'utilisateur. Elles peuvent être utilisées pour fournir des informations plus précises et détaillées sur ce qui s'est passé et pour aider à résoudre le problème plus rapidement. Les erreurs standard sont des erreurs génériques qui sont levées par le système et qui peuvent être difficiles à déboguer.

# Erreur standard
raise StandardError.new('Something went wrong!')

# Erreur personnalisée
raise MyError.new('Something went wrong!', code: 500, data: { user_id: 123 })

Comment traiter une erreur personnalisée ?

Une erreur personnalisée peut être traitée à l'aide de la méthode Exception.rescue. Cette méthode permet de capturer l'erreur et de la traiter de manière appropriée. Par exemple, pour traiter une erreur personnalisée, vous pouvez utiliser la méthode rescue comme ceci :

begin
  # Code qui peut lever une erreur
rescue MyError => e
  # Traitement de l'erreur
end