我在模块中有几个控制器:
class SoapTest::DashboardController < ApplicationController
class SoapTest::TestCasesController < ApplicationController
等
我希望能够检查用户是否对模块具有某些权限,并且由于我没有上述继承的“父”控制器,我想把检查放在应用程序的前一个过滤器中。但我似乎无法获得模块名称:
在应用程序控制器中,我有:
before_filter :check_company_features
def check_company_features
puts controller_name
end
但是controller_name只返回“仪表板”。我需要获得“SoapTest”条款
答案 0 :(得分: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