Ruby on Rails回调,:before_save和:before_create之间有什么区别?


Answers:


363

在Rails下的创建操作中,在数据库操作之前有六个回调,在之后有两个回调。这些是:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    数据库插入
  7. after_create
  8. after_save

更新操作具有完全相同的集合,除了read update而不是create各处(和UPDATE而不是INSERT)。

由此可见,验证是在before_savebefore_create回调之前进行的。

before_save之前的略微发生before_create。据我所知,它们之间什么也没有发生。但before_save也会在更新操作上触发,而before_create只会在创建上触发。


27
before_validation_on_createafter_validation_on_create从Rails 3开始被删除,而是分别使用before_validationafter_validation和option :on => :create
太阳

在使用after_save或时,您将如何引用刚刚创建的记录after_create
bcackerman

@bcackerman- after_saveafter_create回调self中的是刚刚保存的记录,因为它在保存之后存在。这包括自动生成的领域,如idcreated_atupdated_at
Chowlett

还请记住,before_create是指将新对象保存到数据库中,而不是实际create调用的方法。因此,before_create即使从该save方法仍可以被触发。
史蒂夫

1
@Rads-嗯,不是吗?该文档仍然列出before_save第三和before_create第五。
Chowlett

136

before_save每次保存对象时都会调用。因此对于新的和现有的对象。(创建和更新操作)

before_create仅在创建之前。因此,仅适用于新对象(创建操作)


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.