如何在Rails 3中使用'after_initialize'?

时间:2011-02-05 11:56:24

标签: ruby-on-rails-3 activerecord

更新

我错误地检查了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

1 个答案:

答案 0 :(得分:10)