2011-12-01 45 views
0

我正在嘗試使用需要我訪問通過控制器擴展登錄的當前用戶的gem。這是我的ApplicationController與我的想法應該工作:來自ApplicationController的訪問方法

class ApplicationController < ActionController::Base 
    helper :all 
    protect_from_forgery 
    set_current_tenant_to(current_user.member) 

    private 

    def current_user 
     @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    helper_method :current_user 

    def require_user 
     unless current_user 
     flash[:notice] = "You must be logged in to access this page" 
     redirect_to '/login' 
     return false 
     end 
    end 
end 

這失敗與「爲ApplicationController中未定義的局部變量或方法`CURRENT_USER」:類」的set_current_tenant_to。

有沒有辦法通過控制器擴展來訪問current_user方法?

感謝您的幫助!

回答

1

你的助手是在私人部分 - 你想,私人塊外

+0

約翰嗨, 我已經試過了,以及和得到相同的結果。它不僅發生在我的ApplicationController中,而且發生在我嘗試使用的任何控制器中。 再次感謝! – lundie

+0

您做了更改後是否重新加載?如果控制器位於ApplicationController的「private」塊中,則無法從另一個控制器訪問'current_user' – iwasrobbed

+0

IWasRobbed正確 - 需要重新加載它。所有其他控制器* do *從ApplicationController繼承,對吧? –

3

這裏的問題是範圍:如果你定義當前用戶作爲一個實例方法,這將提供給控制器的所有實例(它們都是在每個url請求上創建的),但是您試圖將其用作類方法。

所以將它定義爲一個類的方法:

def self.current_user 
    ... 
end 

但它有沒有要求沒有意義的,它甚至已經沒有多大意義,因爲類將在生產中兌現,並set_current_tenant_to將只調用一次在服務器啓動。

PS對不起necroposting,我剛看到這裏沒有答案