您能否详细解释一下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. Ruby on Rails:从另一个模型迭代模型值before_create/before_save
- 5. collection.find与回调和不回调之间有什么区别?
- 6. JRuby on Rails与Ruby on Rails有什么区别?
- 7. JRuby on Rails与Ruby on Rails有什么区别?
- 8. Ruby on Rails集成和功能测试之间的区别
- 9. jquery-rails和rails-assets-jquery之间有什么区别?
- 10. 关于Textmate Ruby on Rails捆绑的问题,HTML(Rails)模式和Ruby on Rails模式有什么区别?
- 11. dpm()和dsm()之间有什么区别?
- 12. @dynamic和@synthesize之间有什么区别?
- 13. vbNullString和“”之间有什么区别吗?
- 14. * zoom和zoom之间有什么区别?
- 15. String.Concat,string.format和+之间有什么区别?
- 16. StaticLayout和DynamicLayout之间有什么区别
- 17. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之间有什么区别?
- 18. :: after和after之间有什么区别?
- 19. %.02f和%.2f之间有什么区别?
- 20. {$ var}和$ var之间有什么区别?
- 21. ReleaseFloatArrayElements和DeleteLocalRef之间有什么区别
- 22. {0}和“”之间有什么区别?
- 23. getA()和this.getA()之间有什么区别?
- 24. @observable和@published之间有什么区别
- 25. $ {}和#{}之间有什么区别?
- 26. url.getFile()和getpath()之间有什么区别?
- 27. KVC和Properties之间有什么区别?
- 28. Lazy.Force()和Lazy.Value之间有什么区别
- 29. “层”和“层”之间有什么区别?
- 30. 1.1em和1.05em之间有什么区别?
[从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