Ruby onRails3.2.9とRuby1.9.3-p125を使用しています。前の質問の後、関連するコードが「カスタマイズ可能として機能する」以外のクラスに副作用があるため、自己実装acts_as_customizable
プラグインのメタプログラミングに問題があることになりました。
問題を要約するacts_as_customizable
と、Article
モデルに対して「内部的に」(メタプログラミングを介して)記述されたメソッドはモデルにcustomize
メソッドを追加しComment
、時間を節約するために、Railsは起動時にこれらすべてのクラスをロードせず、NoMethodError - undefined method 'customize' for #<Comment:0x0...>
アプリケーションがArticle
クラスがロードされます。
提案された解決策はモデルrequire_dependency 'article'
内にあることでしたComment
が、私は別の方法(おそらく提案されたものよりも良い)を探していますが、この質問で説明されているような問題はありません。つまり、*短いコード**と同じ動作を維持したいのですが、必要に応じて、クラスの読み込みプロセスを変更したり、コード全体の大規模なリファクタリングを計画したりして、より「適切な」方法で物事を作成します。
この状況にどのように対処すればよいですか?についてどう思いますか?
更新:いくつかの調査の結果、問題は開発モードでのみ発生することがわかりました。これは、リクエストごとにクラスを再ロードするようにconfig.cache_classes
設定されているためです。false
注Article
:私の場合、メタプログラミングは非常に有用であり、Comment
クラスは「カスタマイズ」の概念の面で相互に非常に関連していることを指摘したいと思います。だから私は、根底にある振る舞いの変化を軽減する解決策を見つけたいと思います。
*私の場合、メタプログラミング(副作用がある場合でも)により、多くのコードステートメントを回避できます。