您能否詳細解釋一下Ruby on Rails回調函數:before_save
和:before_create
是什麼,以及它們與Rails驗證有什麼關係?驗證發生在:before_save
或:before_create
之後嗎?Ruby on Rails回調,before_save和before_create之間有什麼區別?
回答
在Rails的創建操作中,在數據庫操作之前有兩個回調,之後有兩個回調。爲了,它們是:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
數據庫插入 個
after_create
after_save
更新操作具有完全相同的一組,除了閱讀update
而不是到處create
(和UPDATE的代替INSERT)。
由此可以看出,驗證在before_save
和before_create
回調之前執行。
before_save
發生在before_create
之前。據我所知,他們之間沒有任何反應。但before_save
也會觸發更新操作,而before_create
只會觸發創建。
每次保存對象時調用before_save
。所以對於新的和現有的對象。 (創建和更新動作)
before_create
只在創建之前。因此,只有新對象(create動作)
before_create
VS before_save :on => :create
有時你必須要小心回調的順序
在這裏看到更多的細節:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
'before_save:on =>:create'不起作用(至少在rails 3.2上) – cutalion 2012-05-17 18:04:37
你可以使用:'before_save:generate_api_key,:if =>:new_record?' – 2013-11-17 22:09:01
- 1. Ruby和Ruby on Rails有什麼區別?
- 2. Ruby on Rails和Grails有什麼區別?
- 3. after_initialize和before_create之間回調
- 4. before_sup和before_update Active Record回調之間有什麼區別?
- 5. 在限制方面Ruby和Ruby on Rails有什麼區別?
- 6. JRuby on Rails與Ruby on Rails有什麼區別?
- 7. JRuby on Rails與Ruby on Rails有什麼區別?
- 8. collection.find與回調和不回調之間有什麼區別?
- 9. Ruby on rails:respond_to和respond_with有什麼區別?
- 10. Ruby on Rails:從另一個模型迭代模型值before_create/before_save
- 11. Ruby on Rails:4.2.0軌道和bin/rails之間的區別
- 12. 在jQuery 1.7.2 on(「click」)和on(「click.randomText」)之間有什麼區別?
- 13. Ruby on Rails中Rack和Rails金屬的區別是什麼
- 14. %w和%W之間有什麼區別
- 15. bundle.setup和bundle.require之間有什麼區別
- 16. Ruby on Rails集成和功能測試之間的區別
- 17. touchmove和gesturechange之間有什麼區別?
- 18. jquery-rails和rails-assets-jquery之間有什麼區別?
- 19. extjs中mon()和on()之間有什麼區別?
- 20. 關於Textmate Ruby on Rails捆綁的問題,HTML(Rails)模式和Ruby on Rails模式有什麼區別?
- 21. Ruby On Rails:Gem&Plugin之間的區別?
- 22. 「層」和「層」之間有什麼區別?
- 23. Tableau和QlikView之間有什麼區別
- 24. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 25. @Entity和@embeddable之間有什麼區別
- 26. ContentObservable和DataSetObservable之間有什麼區別?
- 27. :notification.flags和notification.defaults之間有什麼區別?
- 28. proc和lambda之間有什麼區別?
- 29. :: after和after之間有什麼區別?
- 30. read()和io.read()之間有什麼區別?
[從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
如何引用剛剛創建的使用'after_save'或'after_create'的記錄? – bcackerman 2013-11-10 06:12:15
@bcackerman - 在'after_save'或'after_create'回調中,'self'是剛剛保存的記錄,因爲它在保存後存在。這包括自動生成的字段,如'id','created_at','updated_at'。 – Chowlett 2013-11-11 09:24:17