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
ではなく、マクロスタイルの呼び出しを使用します。
私はbuilings団体のために例えばafter_initializeを使用しています。例after_initialize:build_text、:ただし、=>:テキストではありません。 accepts_nested_attributes_forを使用すると非常に役に立ちます。 –
[Rails 4 guide on after_initialize]の最新リンクです(http://guides.rubyonrails.org/active_record_callbacks.html#after-initialize-and-after-find) – stereoscott