after_create和after_save有什么区别,什么时候使用?


Answers:


212

after_create 仅在创建记录后才工作一次。

after_save 每次保存对象时都可以使用-即使多年后才进行更新

因此,如果您只想执行一次此电子邮件操作(然后再也不执行),请使用after_create

如果您想在每次保存对象时都执行此操作,请在after_save


2
读者应注意,根据文档,ActiveRecord update_all不会调用任何回调,包括after_*
user2426679

93

文档

after_create()

Base.save在尚未保存的新对象上进行调用 (不存在任何记录)。

after_save()

在之后被调用Base.save (无论是创建还是更新保存)。


1
after_save()

当您必须保存不经常保存的模型时,效果很好。对于这个经常更改记录的特定示例,建议使用

 after_commit()

确保在执行操作after_commit之后将模型保存在数据库中 :calculate_credit_score

def calculate_credit_score
     #Call a Cron job
end

您建议使用,after_commit但不解释原因。请您详细说明一下?请注意,它after_commit可以在创建,更新和销毁上运行。文档:apidock.com/rails/ActiveRecord/Transactions/ClassMethods / ...因此,它与after_save您真正要销毁记录后调用cron_job的行为不同?还是在操作情况下,将电子邮件发送给现在已删除的用户?使用时要小心after_commit
rmcsharry19年

after_commit在这些CRUD操作上运行,因此,如果他的电子邮件经常更新,则将操作合并到特定的回调将更容易。就我而言,我使用过after_commit : calculate_profile_update, on: :update
pensebien
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.