2013-07-26 213 views
0

我可以在我的rails引擎中訪問主應用程序的ApplicationController嗎? 我想通過引擎將過濾器應用於我的應用程序的ApplicationController。有些代碼會非常有用。Ruby on Rails和Rails引擎

謝謝!

+1

儘管您可以按照接受的答案描述來做到這一點,但您應該避免這種情況,因爲它可能會導致系統的其他部分出現意外的結果,這些部分期望ApplicationController成爲app/controllers/application_controller.rb中定義的結果。考慮在引擎中的類和模塊中提供過濾器,並在ApplicationController本身中寫入before_filter行。這提供了相同的功能,而不太令人驚訝。 – Stephan

回答

0

您可以隨時在您的引擎中打開ApplicationController並編寫您想要的任何過濾器。發動機加載完成後,主應用程序將自動使用此功能。

示例代碼在你的發動機的set_localebefore_filter

class ApplicationController < ActionController::Base 
    before_filter :set_locale 

    def set_locale 
    I18n.locale = params[:locale] if params[:locale].present? 
    end 
end 
0

你可以隔離您希望用它來提高你的主機應用程序的ApplicationController中做功能如下:

  1. 創建一個控制器關注有過濾方法。

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包括每次 應用處於開發重載時間。