我可以在我的rails引擎中訪問主應用程序的ApplicationController嗎? 我想通過引擎將過濾器應用於我的應用程序的ApplicationController。有些代碼會非常有用。Ruby on Rails和Rails引擎
謝謝!
我可以在我的rails引擎中訪問主應用程序的ApplicationController嗎? 我想通過引擎將過濾器應用於我的應用程序的ApplicationController。有些代碼會非常有用。Ruby on Rails和Rails引擎
謝謝!
您可以隨時在您的引擎中打開ApplicationController
並編寫您想要的任何過濾器。發動機加載完成後,主應用程序將自動使用此功能。
示例代碼在你的發動機的set_locale
before_filter
:
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end
end
你可以隔離您希望用它來提高你的主機應用程序的ApplicationController中做功能如下:
Create app/controllers/concerns/filterable.rb
module Concerns::Filterable
include ActiveSupport::Concern
included do
before_filter :do_something
end
module InstanceMethods
def do_something
end
end
end
Create config/initializers/filterable.rb
Rails.application.config.to_prepare do
ApplicationController.send :include, Concerns::Filterable if defined ApplicationController
end
使用上面的初始化,我們要確保我們的Concerns::Filterable
包括每次 應用處於開發重載時間。
儘管您可以按照接受的答案描述來做到這一點,但您應該避免這種情況,因爲它可能會導致系統的其他部分出現意外的結果,這些部分期望ApplicationController成爲app/controllers/application_controller.rb中定義的結果。考慮在引擎中的類和模塊中提供過濾器,並在ApplicationController本身中寫入before_filter行。這提供了相同的功能,而不太令人驚訝。 – Stephan