2011-02-05 14 views
18

UPDATERails 3で 'after_initialize'を使用するには?

私は間違って代わりに(after_initializeの言及がありません)現在、正しいレール3のガイドのedgerailsガイドをチェックします。なぜedgerailsガイドが "間違っている"のか分かりません - 私はedgerailsガイドが最新の最新のガイドであると考えられていましたか?

誰かが同じ「問題」を探しているような場合に備えて、私はこの質問をそのまま残しています。

after_initializeへのマクロスタイルの呼び出しは、行く方法です。



after_initialize方法やマクロ形式の呼び出しとして使用されるべきか?

これは動作しますが、非推奨の警告提供します:

def after_initialize 
    logger.info "Called after_initialize" 
end 

DEPRECATION警告:ベース#のafter_initializeが廃止されました、 Base.after_initializeを使用してください:メソッドを代わりに。

これは動作し、警告がない:10.4 after_initialize and after_find

after_initialize :do_this_after_initialize 
def do_this_after_initialize 
    logger.info "Called after_initialize" 
end 

しかしActive Recordのバリデーションとコールバックガイドは言う:

...あなたは after_initializeを登録しようとした場合またはafter_find マクロスタイルのクラスメソッドを使用して、彼らは だけ無視されます。この動作は、各レコードが大幅にクエリダウン を遅く、データベース内 を発見したため after_initializeとafter_findが 両方

...と呼ばれることになるので、パフォーマンス上の理由に あるだから、そのマクロを意味しますスタイルスタイルの使用法に比べて非効率的ですか?

(私はコードcosを」、ガイドが間違っていると思い王である:D)2011年1月28日から


別の更新


commit hereは、その正しい方法を提案していますまだdef after_initializeではなく、マクロスタイルの呼び出しを使用します。

+3

私はbuilings団体のために例えばafter_initializeを使用しています。例after_initialize:build_text、:ただし、=>:テキストではありません。 accepts_nested_attributes_forを使用すると非常に役に立ちます。 –

+0

[Rails 4 guide on after_initialize]の最新リンクです(http://guides.rubyonrails.org/active_record_callbacks.html#after-initialize-and-after-find) – stereoscott

答えて

関連する問題