ApplicationController的访问方法

时间:2011-12-01 19:33:20

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试使用一个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失败,“undefined局部变量或方法`current_user'用于ApplicationController:Class”。

有没有办法通过控制器扩展访问current_user方法?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

这里的问题在于范围:如果您将当前用户定义为实例方法,它将可用于控制器的所有实例(在每个URL请求上创建),但您尝试使用它作为一种班级方法。

所以将它定义为类方法:

def self.current_user
  ...
end

但没有请求就没有意义,因为类会在生产中兑现,而set_current_tenant_to只会在服务器启动时被调用一次。

PS抱歉为尸检,我刚才看到这里没有答案

答案 1 :(得分:1)

你的帮助者在私人部分 - 你想要在私人区域之外