109 votes

Dans les rails, comment puis-je savoir ce qui a causé l'échec d'un .save(), à part les erreurs de validation ?

J'ai un modèle ActiveRecord qui renvoie true de valid? (et .errors est vide), mais retourne false de save(). Si l'instance de modèle est valide, comment puis-je savoir ce qui cause l'échec de la sauvegarde ?

139voto

Sam Alex Points 310

Si @user.save (par exemple) renvoie false, il suffit d'exécuter ceci pour obtenir toutes les erreurs :

@user.errors.full_messages

125voto

Andy Lindeman Points 7213

Essayez d'utiliser la version Bang save! (avec un point d'exclamation à la fin) et inspectez l'erreur résultante.

3voto

Pencilcheck Points 434

Oui, j'ai résolu ce problème en m'assurant de retourner true dans tous mes callbacks before_* puis ça commence à fonctionner :)

0voto

Roko Points 759

Assurez-vous que vous n'essayez pas d'enregistrer un enregistrement supprimé.

J'ai eu le même problème. Mais contrairement à la réponse sélectionnée - mon problème n'était pas lié aux rappels.

Dans mon cas, j'avais essayé de sauvegarder dans un enregistrement supprimé (supprimé de la base de données).

@user = User.new
@user.save! # user saved to DB
@user.persisted? # true

@user.destroy # user deleted from DB
@user.persisted? # false, user still has its id

@user.valid? # return true
@user.errors # empty
@user.save # return false
@user.save! # raise ActiveRecord::RecordNotSaved

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X