What is the difference between `after_create` and `after_save` and when to use which?
Are after_create
and after_save
the same as per functionality?
I want to do an operation with the email of a user after its account creation.
I want to do that operation when it is saved in the database.
which is preferable to use: after_create
or after_save
?
Solution 1:
after_create
only works once - just after the record is first created.
after_save
works every time you save the object - even if you're just updating it many years later
So if you want to do this email operation only just the once (and then never again) then use after_create
.
If you want to do it every time the object is saved, then do it in after_save
Solution 2:
From the docs:
after_create()
Is called after
Base.save
on new objects that haven‘t been saved yet (no record exists).
after_save()
Is called after
Base.save
(regardless of whether it‘s a create or update save).
Solution 3:
after_save()
Works fine when you have to save models that do not save very often. For this particular example of changing records frequently it would be advisable to use
after_commit()
make sure that the model is saved in the database before the action is executed after_commit :calculate_credit_score
def calculate_credit_score
#Call a Cron job
end