Jua*_*tas 11 activerecord ruby-on-rails callback
来自Rails指南.回调可以挂钩到Active Record Object的生命周期.按执行顺序,它们(从Rails指南中复制):
before_validationafter_validationbefore_savearound_savebefore_createaround_createafter_createafter_saveafter_commit/after_rollbackbefore_validationafter_validationbefore_savearound_savebefore_updatearound_updateafter_updateafter_saveafter_commit/after_rollbackbefore_destroyaround_destroyafter_destroyafter_commit/after_rollback我想知道在哪里放置after_initialize和after_find成以上?我认为after_initialize应该放在之前before_validation,after_find不属于任何三个.我对么?谢谢.
Pav*_*van 21
在after_initialize与after_find回调是两个特殊的回调.
为after_find和after_initialize事件定义回调的唯一方法是将它们定义为methods.如果你尝试将它们声明为handlers,那么它们将被默默地忽略.
来自API
after_find并且after_initialize为查找器找到并实例化的每个对象触发回调,并在实例化after_initialize新对象后触发.
来自指南
该
after_initialize每当一个Active Record对象被实例化回调将被调用,通过直接使用新的或当记录从数据库加载.避免直接覆盖Active Record初始化方法可能很有用.在
after_find每次活动记录从数据库加载一个记录的回调将被调用.如果两者都被定义after_find,after_initialize则在之前调用 .在
after_initialize和after_find回调没有before_*同行,但他们可以注册就像其他活动记录的回调.Run Code Online (Sandbox Code Playgroud)class User < ActiveRecord::Base after_initialize do |user| puts "You have initialized an object!" end after_find do |user| puts "You have found an object!" end end >> User.new You have initialized an object! => #<User id: nil> >> User.first You have found an object! You have initialized an object! => #<User id: 1>
在哪里放置after_initialize和after_find在AR对象的生命周期?
由于他们是从所有其他不同的回调,也他们没有before_*同行,所以笔者(指向导,因为它们是特殊情况,笔者在这里)可能有兴趣将他们分开.
最后我同意after_initialize以前的说法before_validation.情况可能就是这样.
| 归档时间: |
|
| 查看次数: |
6212 次 |
| 最近记录: |