5

gelen yardımcı sınıfı Erişilebilir değil ben yönteminde işareti Oturum KontrolörüGörünüm

çağrılan

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include SessionsHelper 


end 

benim Uygulama Denetleyicisi içinde Yardımcısı Class dahil

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 

aşağıdaki gibi bir yardımcı sınıf tanımlı

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 

Ancak 'current_user' değişkenine # show view kullanıcılarından erişemiyorum.

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


<% end %> 

Diyor ki NilClass

kimse tavsiye misiniz: nil için 'yöntemi `adını tanımsız? current_user yöntemi endekste hiç çağrılmıyor.

cevap

6

controller içerisinde include SessionsHelper koymak denetleyicisi bu modül yöntemlerini içeren, dolayısıyla bunların denetleyicisi yöntemleri erişilebilir. Yardımcı yöntemlerin görünümlerinizde kullanılabilir olmasını istiyorsanız, uygulama denetleyicinizde helper SessionsHelper'u kullanmanız gerekir.

Şunu söyleyeyim, Jits'e katılıyorum, SessionsHelper'da sahip olduğunuz yöntemlerin gerçekten bir yardımcıdan ziyade denetleyiciye ait olduğunu kabul ediyorum.

+0

yerine helper_method olması gerektiğine inanıyorum Teşekkürler. Helping SessionsHelper erişim sorununu çözdü. –

1

Genel olarak, application_controller numaranızda tanımlanan current_user gibi yöntemlere sahip olmanız ve sonra bunları görünümlerde yardımcı olarak kullanabilmeniz gerekir. Bu şekilde kontrolörlerin bunlara erişimi vardır (ve bana güvenirseniz, büyük olasılıkla böyle şeylere erişmeniz gerekir). Örnek:

def current_user 
    .. 
end 
helper :current_user 
+0

Ancak ApplicationController'da Helper sınıfını ekledim. Bazı derslerde benzer bir şey gördüm. Böylece bu şekilde gitti. –

+0

Sadece <% if sign_in? %> görünümdeki kod snippet'i. İmzalı? işlev çağrılır. Ancak mevcut kullanıcıyı bulmakta başarısız oluyor. –

+1

Yardımcının –

İlgili konular