2016-01-18 51 views
2

在我的應用程序控制器我有一個模塊,我包括像:如何在我的視圖中使@current_user可用?

require 'current_user' 
class ApplicationController < ActionController::Base 
    include CurrentUser 


end 

所以,如果有一個令牌的cookie集,查找用戶。

在我的意見我這樣做:

<% if @current_user.present? %> 
... 
.. 

這並不是目前我的觀點,因爲在我的觀點沒有@current_user或CURRENT_USER工作。

如何爲全部我的視圖頁創建一個@current_user變量來訪問?

+0

那個'CurrentUser'中包含什麼? – sevenseacat

回答

1

在我的模塊我只是一些紅寶石元編程把它列入我application_controller類:

module CurrentUser 
    def self.included(base) 
    base.send :helper_method, :current_user 
    end 
end 

現在current_user作品在我的意見。

2

我不知道你的模塊做什麼,但你可以只是做一個方法在ApplicationController

<% if current_user.present? %> 

如果:

def current_user 
    # ... fetch current_user somehow...via your module method, or session: 
    @current_user ||= session[:user_id] ? User.find(session[:user_id]) : nil 
end 

然後,你可以通過在你的看法訪問你真的想強迫它是@current_user,我想最簡單的方法是將其添加爲before_action

class ApplicationController < ActionController::Base 
    before_action :set_current_user 

private 

    def set_current_user 
     @current_user = session[:user_id] ? User.find(session[:user_id]) : nil 
    end 
end 

現在,您可以通過@current_user在視圖中訪問它,但即使您沒有在視圖中使用它,它也會被熱切地抓取。如果使用第一種方法,則只會查詢當前用戶。

相關問題