2011-03-16 60 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

相关问题