我目前正在编写一个 Rails 引擎,我想让它ApplicationController
从引擎配置中指定的控制器下降。
例如,我有lib/my_engine.rb
以下内容:
module MyEngine
mattr_accessor :authenticated_controller
class << self
def authenticated_controller
@@authenticated_controller.constantize
end
end
end
在app/controllers/my_engine/application_controller.rb
中,我有:
class MyEngine::ApplicationController < MyEngine.authenticated_controller
#some code
end
在我的应用程序的初始化程序中,我设置了MyEngine.authenticated_controller = 'AuthenticatedController'
.
这使我可以让我的引擎对身份验证引擎几乎一无所知,因为现在我的引擎所需要的只是一些控制器,AuthenticatedController
在这种情况下,提供一个带有current_user
. 我用这篇博文来寻找灵感。
一切似乎都很好,但我正在使用 RubyMine 进行开发,它抱怨在类定义中使用变量而不是常量。它提出了这是否是一个好主意的问题。
那么,这种方法好吗?是否有一些我没有看到的问题?这种方法有什么替代方法吗?