我正在使用登录/注销系统。我没有使用设计,而是创建了一个活动记录用户模型,并使用会话来记住用户是否已登录。一切正常,直到我在application_controller.rb
中添加这些行以在登录前进行布局,然后进行一次布局。
layout :set_layout
def set_layout
if session[:current_user_id]
'afterlogin'
else
'application'
end
end
现在,在我登录并在html页面的某个地方使用cancancan
后,我得到了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
添加该方法后,我应该修改它吗?
答案 0 :(得分:4)
CanCanCan expects a current_user method to exist in the controller.
First, set up some authentication (such as Authlogic or Devise).
See Changing Defaults if you need different behavior.
我建议您安装Devise,以便它附带一个免费的current_user方法。
仅供参考:https://github.com/plataformatec/devise
更新
当用户成功登录时,您可以将用户的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