2011-04-15 73 views
0

我有一些控制器和每個控制器的方法,每個方法從會話值我有下面的代碼:獲得每個控制器

@user = session[:user] 

有沒有辦法避免將代碼放到每一個每一個方法控制器?

回答

2

可以在ApplicationController添加代碼:

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    before_filter :current_user 

    def current_user 
    @user = session[:user] 
    end 
end 
0

@nash的前面回答是好的,這裏是爲您提供可以在每個方法/視圖使用的輔助方法替代。這就是Devise那樣的寶石去吧:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    helper_method :current_user 
    helper_method :user_signed_in? 

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

    def user_signed_in? 
     return 1 if current_user 
    end 

    def authenticate_user! 
     if !current_user 
     flash[:error] = 'You need to sign in before accessing this page!' 
     redirect_to signin_services_path 
     end 
    end 
end