2014-01-30 80 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

相關問題