更新
我错误地检查了edgerails指南而不是当前正确的Rails 3指南(没有提到after_initialize)。不确定为什么edgerails指南是“不正确的” - 我认为edgerails指南应该是最新的最新指南?
我要离开这个问题,以防万一有人来寻找同样的“问题”。
对after_initialize
的宏观式调用是可行的方法。
after_initialize
应该用作方法还是宏观式调用?
这样可行,但会发出弃用警告:
def after_initialize
logger.info "Called after_initialize"
end
DEPRECATION WARNING:不推荐使用Base#after_initialize, 请改用Base.after_initialize:方法。
这样可行,并且没有警告:
after_initialize :do_this_after_initialize
def do_this_after_initialize
logger.info "Called after_initialize"
end
但10.4 after_initialize and after_find中的 Active Record Validations and Callbacks Guide 表示:
...如果您尝试注册 after_initialize或after_find使用 宏观式的类方法,他们会 只是被忽略了。这种行为是 由于性能原因,自此 after_initialize和after_find会 每个记录都会被调用 在数据库中,显着放缓 查询......
那么这意味着宏方式的使用效率低于方法式方式吗?
(我猜指南错了,'cos代码为王:D)
<小时/> 另一个更新
2011年1月28日的commit here表明,正确的方法仍然是使用宏观式通话,而不是def after_initialize
。