Ruby on rails 为什么不';包含在控制器名称和请求中的t名称空间
我有一个授权方法,它截取ApplicationController上的请求,并发送给我构建的扩展用户的模块 看起来像这样Ruby on rails 为什么不';包含在控制器名称和请求中的t名称空间,ruby-on-rails,Ruby On Rails,我有一个授权方法,它截取ApplicationController上的请求,并发送给我构建的扩展用户的模块 看起来像这样 class ApplicationController < ActionController::Base def authorized?(action="#{action_name}", controller="#{controller_name.singularize}") current_user.authorize(current_user.role,
class ApplicationController < ActionController::Base
def authorized?(action="#{action_name}", controller="#{controller_name.singularize}")
current_user.authorize(current_user.role, controller, action)
end
def authorize
redirect_to unauthorized_path unless authorized?
end
end
class ApplicationController
这非常有效,但今天我想在命名空间下使用一个控制器:
class Trainings::ResourcesController < ApplicationController
before_action :authorize
...
end
课堂培训::ResourcesController
但当我查看请求时,控制器名称只是resources
。我本以为它是指培训。它是第一个控制器,所以现在不是问题,但一旦我有了类似于Clients::ResourcesController
的东西,如果它们没有相同的权限,它就会破坏我的auth模块
为什么控制器名称不在请求中包含名称空间?self.class.to\s!。它让你有了名字空间。见下面我的日志
def authorized?(action="#{action_name}", controller="#{controller_name.singularize}")
puts "action:#{action_name}--controller:#{self.class.to_s}"
current_user.authorize(current_user.role, controller, action)
end
def authorize
redirect_to unauthorized_path unless authorized?
end
Started GET "/clients/resources" for 0:0:0:0:0:0:0:1 at 2018-04-14 18:29:34 +0530
Processing by Clients::ResourcesController#index as HTML
action:index--controller:Clients::ResourcesController
Started GET "/trainings/resources" for 0:0:0:0:0:0:0:1 at 2018-04-14 18:33:52 +0530
Processing by Trainings::ResourcesController#index as HTML
action:index--controller:Trainings::ResourcesController
简短回答: 它不包含名称空间,因为它不应该包含名称空间 更长的答案: 问题中有一个重要的错误假设:
controller\u name
未作为请求的一部分传递,它是中定义的帮助器方法
不包括名称空间,因为此方法根据传入的名称显式删除名称空间
知道这是预期的行为,最好在ApplicationController上重新编写
authorized?
方法,如praga所建议的那样使用class
。谢谢!我真的很想知道它为什么会这样,但我做了一些源头调查并发现了(见答案)。现在我知道发生了什么,这是一个很好的建议来解决它。