我attr_accessor
在我的控制器中使用来存储在 applicationController 中定义的方法中设置的权限,但我遇到了问题。如果我这样做:
class ApplicationController < ActionController::Base
attr_accessor :perms
def self.set_permissions *permissions
self.perms = permissions
end
def check_permissions
print self.perms
end
end
然后rails声称perms=
不存在
如果我做:
class ApplicationController < ActionController::Base
attr_accessor :perms
def self.set_permissions *permissions
@perms = permissions
end
def check_permissions
print @perms
end
end
@perms
在任何子控制器check_permissions
中nil
,我检查了哪些实例方法可用:print self.instance_variables
但@perms
没有出现;可能是因为@perms
正在为类实例设置而不是为调用操作时创建的控制器的对象实例
这是怎么回事?导轨不喜欢attr_accessor
控制器吗?我怎样才能让它工作,这样我就可以在类中设置权限,并让该类的任何对象可以访问它们,这样我就可以像这样设置它们:
class Api::ApiController < ApplicationController
set_permissions :api
before_action :check_permissions, except: :set_permissions
end
我必须使用self.set_permissions
,否则当我尝试设置它们时它声称 set_permissions 不存在(因为它是对象方法而不是类方法)
编辑:为澄清起见,我希望在控制器中设置权限(但每个控制器都不同);对于该控制器的任何实例(即为操作创建的对象实例)或从该控制器继承的任何控制器(例如,节点控制器从 api 控制器继承,因此使用相同的权限)都是相同的,除非它是在该继承的控制器中单独定义的(令牌控制器继承自 api 控制器,但需要无权限,因此一个人实际上可以在不需要权限的情况下获得令牌)。