В чем разница между `after_create` и` after_save` и когда использовать?

Являются ли after_create и after_save такими же, как для каждой функциональности?

Я хочу выполнить операцию с электронной почтой пользователя после создания учетной записи.

Я хочу выполнить эту операцию, когда она будет сохранена в базе данных.

который предпочтительнее использовать: after_create или after_save?

Ответ 1

after_create работает только один раз - сразу после создания записи.

after_save работает каждый раз, когда вы сохраняете объект - даже если вы просто обновляете его много лет спустя

Итак, если вы хотите выполнить эту операцию электронной почты только один раз (а затем никогда больше), используйте after_create.

Если вы хотите делать это каждый раз, когда объект сохраняется, то сделайте это в after_save

Ответ 2

От документы:

after_create()

Вызывается после Base.save для новых объектов, которые не (запись не существует).

after_save()

Вызывается после Base.save(независимо от того, является ли это созданием или сохранить обновление).

Ответ 3

after_save()

Прекрасно работает, когда вам нужно сохранять модели, которые не сохраняются очень часто. Для этого конкретного примера часто изменяющихся записей было бы целесообразно использовать

 after_commit()

убедитесь, что модель сохранена в базе данных до того, как действие выполнено   after_commit: calculate_credit_score

def calculate_credit_score
     #Call a Cron job
end