Documentation / Formulaires / Erreurs de base de données
Erreurs de base de données
database_error() analyse une erreur DB pour la remonter au bon champ.
database_error() analyse une erreur DB pour la remonter au bon champ.
Pour un formulaire d'entité, ValidationForm::save l'appelle déjà. Le Err est le formulaire, avec l'erreur posée :
match validated.save(&request.engine.db).await {
Ok(_form) => { /* succès */ }
Err(form) => { /* contrainte unique sur le champ, sinon erreur globale */ }
}
Après une écriture maison qui renvoie un DbErr, on l'appelle soi-même :
if let Err(err) = insert_user(&request.engine.db).await {
form.database_error(&err);
}
Une erreur qui contient encore SQLx est classée, puis remplacée par une phrase traduite. Le texte du moteur est journalisé.
- Unicité : sur le champ quand le message ou la contrainte nomme la colonne (« Ce email est déjà utilisé »), sinon une phrase globale.
- Clé étrangère, valeur obligatoire, contrainte : une phrase globale chacune. L'exclusion Postgres prend celle de la contrainte.
- Le reste : une phrase générique (
forms.db_error), sans le texte du moteur.
Une DbErr::Custom est une phrase déjà choisie (refus du gate, enregistrement lié, champ illisible). Elle est affichée telle quelle.