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