我有一个Rails引擎,并在{Rails_engine} /lib/role_authorization/session_user.rb
中有以下内容 module RoleAuthorization
class SessionUser
mattr_accessor :current_user, :role
def current_user(user)
current_user = user
end
def roles(role)
role = roles
end
end
end
我从main_application调用以下方法 {main_app} /errors/application_errors.rb
class ApplicationErrors
def self.access_denied error, controller
RoleAuthorization::SessionUser.current_user(current_user)
end
但是我在这里得到一个未定义的方法current_user。有没有人知道我在这做什么
答案 0 :(得分:1)
RoleAuthorization::SessionUser.current_user
未定义,因为您在SessionUser类上将current_user
定义为实例方法。如果你不确切知道如何在系统的其他部分使用这个类,那些以下建议可能会有效,但会破坏别的东西:
RoleAuthorization::SessionUser.new.current_user(current_user)
或将self添加到SessionUser中的方法声明:
module RoleAuthorization
class SessionUser
class << self
attr_accessor :current_user, :role
def current_user(user = nil)
self.current_user ||= user
end
end
end
end
注意我已将mattr_accessor
更改为attr_accessor
。这是因为前者仅适用于模块,而您在类中调用它。然后我用class << self
打开单例类,这样我就可以将current_user定义为类方法,并使用attr_accessor来访问类实例变量。将用户分配给self.current_user现在可以通过以下方式进行访问:RoleAuthorization::SessionUser.current_user