web-dev-qa-db-fra.com

Quelle est la différence entre `after_create` et` after_save` et quand utiliser lequel?

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

Je souhaite effectuer une opération avec le courrier électronique d'un utilisateur après la création de son compte.

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

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

121

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 ne l'actualisez que plusieurs années plus tard.

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

Si vous voulez le faire tous les fois l'objet est enregistré, faites-le dans after_save

208
Taryn East

De les docs :

after_create()

Est appelé après Base.save Sur les nouveaux objets qui n’ont pas encore été sauvegardés (aucun enregistrement n’existe).

after_save()

Est appelé après Base.save (Qu’il s’agisse d’une sauvegarde de création ou de mise à jour).

92
Michael Kohl
after_save()

Fonctionne bien lorsque vous devez enregistrer des modèles qui ne sont pas enregistrés très souvent. Pour cet exemple particulier de modification fréquente des enregistrements, il est 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
Emma