2011-03-16 57 views
1

我有幾個控制器是一個模塊中:您如何在模塊化控制器中使用過濾器?

class SoapTest::DashboardController < ApplicationController 

class SoapTest::TestCasesController < ApplicationController 

我希望能夠檢查用戶是否有一個模塊某些權限,因爲我沒有「父」控制器上面的繼承,我想在應用程序中的過濾器之前把檢查。但我似乎無法得到模塊名稱:

在應用控制器,我有:

before_filter :check_company_features 

def check_company_features 
    puts controller_name 
end 

但CONTROLLER_NAME只是返回的「儀表板」。我需要獲得「SoapTest」條款

回答

1

請注意,您目前所稱的modules實際上是namespaces

controller_name只返回類名(而不是完全限定名)的原因是因爲Rails明確地刪除了名稱空間。您可以通過調用控制器類上的Ruby #name方法來獲取它們。

class SoapTest::DashboardController < ApplicationController 
    before_filter :check_company_features 

    def check_company_features 
    puts controller_name 
    # => "dashboard_controller" 
    puts self.class.name 
    # => "SoapTest::DashboardController" 
    end 
end 

有幾個字符串拐點方法,你可以在#name調用來獲取格式化版本。

但是,我強烈建議您使用命名空間的主控制器。 而不是使用

class SoapTest::DashboardController < ApplicationController 

,你可以擴展SoapTest::ApplicationController

class SoapTest::ApplicationController < ApplicationController 
    before_filter :check_company_features 

    def check_company_features 
    # ... 
    end 
end 

class SoapTest::DashboardController < SoapTest::ApplicationController 
end 
+0

將這個soaptestapplication控制器駐留在同一目錄中的孩子?所以controllers/soap_test/soap_test_application_controller.rb?也可以有一個額外的控制器,你不會使用,除了繼承? – corroded 2011-03-16 08:56:26

+0

是這兩個問題的答案。 – 2011-03-16 08:58:16

+0

廢話,我剛剛實現了3個控制器中的2個繼承自inheritedresources。另一個從應用程序繼承。我會創建2個基本控制器嗎? – corroded 2011-03-16 09:04:11

相關問題