2016-02-27 53 views
0

我正在处理登录/注销系统。我创建了一个活动记录用户模型,并使用会话来记住用户是否登录,而不是使用设计。一切工作正常,直到我在application_controller.rb中添加这些行以在登录之前和之后添加一个布局。未定义的本地变量或方法`current_user'cancancan

layout :set_layout 
    def set_layout 
    if session[:current_user_id] 
     'afterlogin' 
    else 
     'application' 
    end 
    end 

现在,我登录并cancancan被在HTML页面中使用的地方后,我得到undefined local variable or method 'current_user'。我认为我必须添加一个current_user方法,但我不完全在哪里以及如何定义它。

编辑:我已经在正在使用的登录另一个类类似的东西:

class Admin::ApplicationController < ApplicationController 
    before_action :authorize 

    def authorize 
    begin 
    @current_user ||= User.find(session[:current_user_id]) if session[:current_user_id] 
    rescue ActiveRecord::RecordNotFound 
    session.destroy 
    redirect_to '/login',alert: 'Please login' 
    end 
end 

end 

我应该修改此之后我再补充一点的方法?

回答

3
​​

我建议您安装Devise,以便它带有免费的current_user方法。

FYI:https://github.com/plataformatec/devise


UPDATE

当用户登录成功,你可以存储用户的会话ID。

session[:current_user_id]=user.id 

,这样,在你的ApplicationController中,你可以做

def current_user 
    @current_user ||= session[:current_user_id] && User.find_by_id(session[:current_user_id]) 
end 
helper_method :current_user 
+0

我不想用色器件。我想使用我创建的工作,直到布局的变化(如果我删除它工作正常)。我阅读了文档,我问了在我的情况下应该采用哪种方法。这不是一个答案。 –

+0

@BogdanDaniel:我已经更新了我的答案。 – Jefferson

+0

感谢您的更新。你能检查我的编辑吗? –