UPDATE如何在Rails 3中使用'after_initialize'?
我錯誤地檢查了edgerails引導,而不是目前的Rails正確引導3(沒有提及after_initialize的)。不知道爲什麼edgerails指南是「不正確的」,但我認爲edgerails指南應該是最新的最新指南?
我就這樣離開這個問題,以防萬一有人來尋找相同的「問題」。
宏調式呼叫after_initialize
是要走的路。
應該after_initialize
被用作方法或宏風格的電話嗎?
這工作,但給出了一個棄用警告:
def after_initialize
logger.info "Called after_initialize"
end
棄用警告:基地#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說:
...如果您嘗試註冊 after_initialize或者使用 宏觀式的類方法after_find,他們將 只是被忽略。此行爲是 由於性能方面的原因,因爲 after_initialize和after_find將 都被稱爲爲每個記錄在數據庫中找到 ,顯著放緩 下來查詢...
所以這意味着宏觀風格的用法與方法風格的方式相比效率低下?
(我猜導向是錯誤的,「COS代碼爲王:d)
另一個更新
從2011年1月28日,一個commit here,表明正確的方法仍然使用宏觀式呼叫,而不是def after_initialize
。
我使用after_initialize例如用於builings關聯。例如after_initialize:build_text,:unless =>:text。使用accept_nested_attributes_for時非常有幫助 – 2011-02-05 18:21:44