2014-01-30 50 views
1

我有一个Rails引擎,并有在{} Rails_engine /lib/role_authorization/session_user.rb从主应用程序调用的Rails引擎的方法

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

您可以使用:: RoleAuthorization :: SessionUser.current_user(current_user) –

回答

0
RoleAuthorization::SessionUser.current_user 

是不确定的,因为你定义current_user作为对SessionUser类的一个实例方法。没有确切知道你是如何在系统的其余部分使用这个类,这些下面的建议可以工作,但导致其他问题:

RoleAuthorization::SessionUser.new.current_user(current_user) 

或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打开singleton类,这样我就可以将current_user定义为类方法,并使用attr_accessor来访问类实例变量。将用户分配给self.current_user将现在可以通过以下方式访问:RoleAuthorization::SessionUser.current_user

相关问题