`after_create`和`after_save`有什么区别?何时使用哪个?

时间:2011-06-21 08:10:02

标签: ruby-on-rails ruby ruby-on-rails-3

after_createafter_save是否与每项功能相同?

我希望在创建帐户后使用用户的电子邮件进行操作。

我想在保存到数据库中时执行该操作。

最好使用:after_createafter_save

3 个答案:

答案 0 :(得分:207)

after_create仅适用一次 - 就在首次创建记录之后。

每次保存对象时

after_save都会起作用 - 即使您多年后才更新它

因此,如果您只想进行一次这样的电子邮件操作(然后再从不再这样做),那么请使用after_create

如果您希望每隔时间保存对象,请在after_save

中执行此操作

答案 1 :(得分:91)

来自the docs

  

after_create()

     

之后被召唤   Base.save关于没有的新对象   已保存(无记录)。

     

after_save()

     

Base.save之后调用   (不管它是否是创造   或更新保存)。

答案 2 :(得分:1)

after_save()

当你必须保存不经常保存的模型时,工作正常。 对于频繁更改记录的这个特定示例,建议使用

 after_commit()

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

def calculate_credit_score
     #Call a Cron job
end