簡體   English   中英

來自ApplicationController的訪問方法

[英]Access method from ApplicationController

我正在嘗試使用要求我訪問通過控制器擴展名登錄的當前用戶的gem。 這是我的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

這在set_current_tenant_to上失敗,帶有“未定義的局部變量或ApplicationController:Class的方法“ current_user””。

有什么方法可以通過控制器擴展來訪問current_user方法?

謝謝你的幫助!

這里的問題是范圍:如果您將當前用戶定義為實例方法,則它將對控制器的所有實例(在每個url請求上創建)都可用,但是您嘗試將其用作類方法。

因此,將其定義為類方法:

def self.current_user
  ...
end

但是沒有請求就沒有意義,而且意義更小,因為類將在生產中兌現,並且set_current_tenant_to在服務器啟動時僅被調用一次。

PS對您的屍體投遞表示抱歉,我剛剛看到這里沒有答案

您的助手位於私有部分-您希望在私有塊之外

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM