在Rails中重新加载动态创建的控制器

时间:2013-05-28 14:42:20

标签: ruby-on-rails ruby

我有一个应用程序,在ActionDispatch::Routing::RouteSet::Dispatcher.controller_referenceObject.const_set的帮助下,我在Class.new方法中动态创建控制器类。

这很好用,直到我修改了这个动态创建的控制器所依据的控制器(这种情况发生了 LOT ,因为我不断对控制器进行更改)。

这会抛出以下异常:

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

   ...

1 个答案:

答案 0 :(得分:0)

尝试在config/environments/development.rb&中找到此属性config/environments/production.rb

  

config.cache_classes = true

config.cache_classes控制是否应在每个请求上重新加载应用程序类和模块。

另外,请查看下面#5中的初始化顺序(注意蓝色注释)。

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