我目前正在編寫一個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
的方法。我使用this blog post作爲靈感。
這一切似乎工作得很好,但我使用RubyMine進行開發,它抱怨在類定義中使用變量而不是常量。它提出了這是否是一個好主意的問題。
那麼,這種方法好嗎?我有沒有看到一些陷阱?這種方法有什麼替代方法嗎?
SEMS沒什麼問題。 RubyMine沒有考慮到您的項目是Rails引擎的事實。因此,預計會有虛假的警告。 – PinnyM
警告比這更一般。即使在Rails應用程序的上下文之外,我也看到了錯誤。確切的RubyMine錯誤是'類/模塊名稱必須是CONSTANT'。 –
但是,感謝您的再次肯定,這是好的。 –