【发布时间】:2014-07-08 15:17:21
【问题描述】:
我在我的控制器中使用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
check_permissions 中的@perms 在任何子控制器中是nil,我检查了哪些实例方法可用:print self.instance_variables 但@perms 没有出现;可能是因为为类实例设置了@perms,而不是为调用操作时创建的控制器的对象实例设置了
怎么了? Rails 不喜欢控制器上的attr_accessor 吗?我怎样才能让它工作,这样我就可以在类中设置权限,并让该类的任何对象可以访问它们,这样我就可以像这样设置它们:
class Api::ApiController < ApplicationController
set_permissions :api
before_action :check_permissions, except: :set_permissions
end
我必须使用self.set_permissions,否则当我尝试设置它们时它声称set_permissions不存在(因为它是对象方法而不是类方法)
编辑: 为了澄清起见,我希望在控制器中设置权限(但每个控制器都不同);对于该控制器的任何实例(即为操作创建的对象实例)或从该控制器继承的任何控制器(例如节点控制器从 api 控制器继承,因此使用相同的权限)都是相同的,除非它是在该继承的控制器中单独定义的(tokens 控制器继承自 api 控制器,但需要无权限,因此一个人实际上可以在不需要权限的情况下获得令牌。
【问题讨论】:
标签: ruby-on-rails attr-accessor