Quelle est la différence entre `après créer " et "après enregistrer" et quand à utiliser?

Sont after_create et after_save les mêmes que pour la fonctionnalité?

Je veux faire une opération avec l'e-mail d'un utilisateur après sa création de compte.

Je veux faire cette opération quand elle est enregistrée dans la base de données.

, Qui est préférable d'utiliser: after_create ou after_save?

116
demandé sur Arslan Ali 2011-06-21 12:10:01

3 réponses

after_create ne fonctionne qu'une seule fois - juste après la création de l'enregistrement.

after_save fonctionne chaque fois que vous enregistrez l'objet-même si vous le mettez à jour plusieurs années plus tard

Donc, si vous voulez faire cette opération de messagerie seulement une fois (et plus jamais), utilisez after_create.

Si vous voulez le faire tous les fois que l'objet est enregistré, puis le faire en after_save

198
répondu Taryn East 2012-07-18 00:10:56

À partir de les documents :

after_create()

Est appelé après Base.save sur les nouveaux objets qui n'ont pas a été enregistré (aucun enregistrement n'existe).

after_save()

Est appelé après Base.save (qu'il s'agisse d'une création ou mettre à jour Enregistrer).

91
répondu Michael Kohl 2015-04-24 17:33:45
after_save()

Fonctionne très bien lorsque vous devez enregistrer des modèles qui n'enregistrent pas très souvent. Pour cet exemple particulier de changement fréquent d'enregistrements, il serait conseillé d'utiliser

 after_commit()

Assurez-vous que le modèle est enregistré dans la base de données avant l'exécution de l'action after_commit :calculate_credit_score

def calculate_credit_score
     #Call a Cron job
end
1
répondu Emma 2017-04-22 08:05:03