2011-06-06 133 views

回答

330

在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

更新操作具有完全相同的一组,除了阅读update而不是到处create(和UPDATE的代替INSERT)。

由此可以看出,验证在before_savebefore_create回调之前执行。

before_save发生在before_create之前。据我所知,他们之间没有任何反应。但before_save也会触发更新操作,而before_create只会触发创建。

+21

[从Rails 3中删除''before_validation_on_create'和'after_validation_on_create'](http://guides.rubyonrails.org/v3.2.9/active_record_validations_callbacks.h tml#available-callbacks),而是分别使用'before_validation'和'after_validation'选项':on =>:create'。 – Sun 2013-05-20 14:59:47

+0

如何引用刚刚创建的使用'after_save'或'after_create'的记录? – bcackerman 2013-11-10 06:12:15

+0

@bcackerman - 在'after_save'或'after_create'回调中,'self'是刚刚保存的记录,因为它在保存后存在。这包括自动生成的字段,如'id','created_at','updated_at'。 – Chowlett 2013-11-11 09:24:17

119

每次保存对象时调用before_save。所以对于新的和现有的对象。 (创建和更新动作)

before_create只在创建之前。因此,只有新对象(create动作)

相关问题