2011-06-06 90 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動作)

相關問題