5

殘疾人專用我定義了一個輔助類,如下助手類沒有從View

module SessionsHelper 

    def current_user 
     @current_user= User.find_by_fbid(session[:fbid]) 
    end 


    def sign_in(user) 
     session[:fbid] = user.fbid 
     @current_user = user 

    end 


    def signed_in? 
     !current_user.nil? 
    end 


    end 

我包括輔助類在我的應用程序控制器

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include SessionsHelper 


end 

在方法的符號會從會話控制器

稱爲
class SessionsController < ApplicationController 


    def create 

    user = User.find_or_create_by_fbid(params[:user][:fbid]) 
    user.update_attributes(params[:user]) 
    sign_in(user) 
    redirect_to user_path(user) 

    end 

end 

但是我無法從用戶#show view訪問'current_user'變量。

<% if signed_in? %> 
<p> 
    <b>Current User:</b> 
    <%= current_user.name %> 
</p> 


<% end %> 

它說:NilClass

任何人都可以請指教:對於無未定義的方法'名稱」? current_user方法根本不從索引調用。

回答

6

include SessionsHelper在你的控制器包括控制器模塊的方法,讓他們在你的控制器方法訪問。您希望在視圖中使用幫助程序方法,因此您需要在應用程序控制器中使用helper SessionsHelper

這就是說,我確實認同SessionsHelper中的方法確實屬於控制器而不是輔助器。

+0

謝謝。包括幫手SessionsHelper確實解決了訪問問題。 – 2011-06-05 07:38:52

1

一般而言,您應該在application_controller中定義current_user這樣的方法,然後在視圖中將其作爲助手提供。這樣控制器就可以訪問它們(並相信我,你很可能需要訪問這些東西)。例如:

def current_user 
    .. 
end 
helper :current_user 
+0

但我在ApplicationController中包含了Helper類。在一些教程中看到類似的東西。因此就這樣走了。 – 2011-06-04 22:01:45

+0

我剛剛添加了<%if signed_in? %>代碼片段在視圖中。 signed_in?函數被調用。但它無法找到當前用戶。 – 2011-06-05 02:47:56

+1

我相信應該是helper_method而不是幫手 – 2012-06-19 17:53:44