`循环依赖` - 在 Rails 4.2.0 引擎的应用程序控制器中继承
`circular dependency` - inheritance in application controller of Rails 4.2.0 engine
将引擎从 Rails 3.2 升级到 Rails 4.2.0 时,应用程序控制器中的以下继承导致 rspec 中的 circular dependency
错误:
class ApplicationController < ApplicationController
end
我们有 config.eager_load = false
config/development.rb.
错误:
activesupport-4.2.0/lib/active_support/dependencies.rb:492:in `load_missing_constant': Circular dependency detected while autoloading con
stant Authentify::ApplicationController (RuntimeError)
这里是Rails engine document (ch:4.3.2) 解释这种代码的做法。据我了解,这种继承的目的是允许引擎访问 Rails 应用程序或当前引擎安装到的其他引擎中的方法。我们想在 Rails 4.2.0 引擎中做同样的事情。如何解决这个问题?
您的 applicationController 显然是在尝试从自身继承,它应该看起来像
class ApplicationController < ActionController::Base
在rails4引擎中,正确的格式是:
class ApplicationController < ::ApplicationController
end
假设 class 在 module MyEngine
之内。或者
class MyEngineName::ApplicationController < ::ApplicationController
end
将引擎从 Rails 3.2 升级到 Rails 4.2.0 时,应用程序控制器中的以下继承导致 rspec 中的 circular dependency
错误:
class ApplicationController < ApplicationController
end
我们有 config.eager_load = false
config/development.rb.
错误:
activesupport-4.2.0/lib/active_support/dependencies.rb:492:in `load_missing_constant': Circular dependency detected while autoloading con
stant Authentify::ApplicationController (RuntimeError)
这里是Rails engine document (ch:4.3.2) 解释这种代码的做法。据我了解,这种继承的目的是允许引擎访问 Rails 应用程序或当前引擎安装到的其他引擎中的方法。我们想在 Rails 4.2.0 引擎中做同样的事情。如何解决这个问题?
您的 applicationController 显然是在尝试从自身继承,它应该看起来像
class ApplicationController < ActionController::Base
在rails4引擎中,正确的格式是:
class ApplicationController < ::ApplicationController
end
假设 class 在 module MyEngine
之内。或者
class MyEngineName::ApplicationController < ::ApplicationController
end