Différence entre after_create, after_save et after_commit dans les rails de rappels
La différence entre after_create
, after_save
et after_commit
dans les Rails, c'est que:
after_save
est invoquée lorsqu'un objet est créé et mis à jourafter_commit
est appelé à créer, mettre à jour et de les détruire.after_create
n'est appelée lors de la création d'un objet
Est-ce la seule différence parmi ceux-ci, ou existe-il d'autres différences majeures?
- Il duplique pas où est after_commit dans cette question?
Vous devez vous connecter pour publier un commentaire.
Vous avez presque eu droit. Cependant il existe une différence majeure entre
after_commit
etafter_create
ouafter_save
c'est à direDans le cas de
after_create
, ce sera toujours avant l'appel à la méthode save (ou créer) des rendements.Rails encapsule chaque sauvegarde, à l'intérieur d'une transaction et le avant/après de créer des rappels exécuter à l'intérieur de la transaction (une conséquence de cela est que si une exception est levée dans un after_create la sauvegarde sera restaurée). Avec
after_commit
, votre code ne fonctionne pas jusqu'à ce que après la ultrapériphériques transaction a été validée. Cela pourrait être la transaction rails créé ou créés par vous-même (par exemple, si vous vouliez faire plusieurs changements à l'intérieur d'une seule opération). Posté iciCela signifie également, que si
after_commit
soulève une exception, alors la transaction ne sera pas annulée.Avec l'Ordre des rappels
after_create -
Est appelé d'après Modèle.économisez sur les nouveaux objets qui n'ont pas encore été enregistrée (il n'existe aucun document)
after_save -
Est appelé d'après Modèle.enregistrer (qu'il s'agisse d'une création ou de mise à jour de l'enregistrer)
after_commit -
Est appelée après la base de données de la transaction est terminée.