0

およびActionDispatch::Routing::RouteSet::Dispatcher.controller_referenceの助けを借りて、メソッド内にコントローラー クラスが存在しない場合に動的に作成するアプリケーションがあります。Object.const_setClass.new

これは、この動的に作成されたコントローラーの基になっているコントローラーを変更するまでは正常に機能します (これは、コントローラーに常に変更を加えているため、開発中に多く発生します)。

これにより、次の例外がスローされます。

ArgumentError

A copy of Base::FooController has been removed from the module tree but is still active!

親である があり、Base::FooControllerという名前のコントローラーをオンザフライで作成していBar::FooControllerます。

この例外は でスローされていActiveSupport::Dependencies.load_missing_constantます。このクラスをリロード/再作成して例外を回避する方法はありますか?

activesupport/lib/active_support/dependencies.rb

def load_missing_constant(from_mod, const_name)
  log_call from_mod, const_name

   # I want to do a check here and recreate the controllers that are needed....

   unless qualified_const_defined?(from_mod.name) && Inflector.constantize(from_mod.name).equal?(from_mod)
     raise ArgumentError, "A copy of #{from_mod} has been removed from the module tree but is still active!"
   end

   ...
4

1 に答える 1

0

config/environments/development.rb&にあるこのプロパティを試してくださいconfig/environments/production.rb:

config.cache_classes = true

config.cache_classesリクエストごとにアプリケーション クラスとモジュールを再ロードするかどうかを制御します。

また、以下の #5 の初期化の順序を見てください (青色のコメントに注意してください)。

http://guides.rubyonrails.org/configuring.html

于 2013-05-28T15:10:11.410 に答える