您如何在模块化控制器中使用过滤器?
问题描述:
我有几个控制器是一个模块中:您如何在模块化控制器中使用过滤器?
class SoapTest::DashboardController < ApplicationController
class SoapTest::TestCasesController < ApplicationController
等
我希望能够检查用户是否有一个模块某些权限,因为我没有“父”控制器上面的继承,我想在应用程序中的过滤器之前把检查。但我似乎无法得到模块名称:
在应用控制器,我有:
before_filter :check_company_features
def check_company_features
puts controller_name
end
但CONTROLLER_NAME只是返回的“仪表板”。我需要获得“SoapTest”条款
答
请注意,您目前所称的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
将这个soaptestapplication控制器驻留在同一目录中的孩子?所以controllers/soap_test/soap_test_application_controller.rb?也可以有一个额外的控制器,你不会使用,除了继承? – corroded 2011-03-16 08:56:26
是这两个问题的答案。 – 2011-03-16 08:58:16
废话,我刚刚实现了3个控制器中的2个继承自inheritedresources。另一个从应用程序继承。我会创建2个基本控制器吗? – corroded 2011-03-16 09:04:11