5

he definido una clase de ayuda de la siguiente maneraclase auxiliar no es accesible desde Ver

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 

incluí la clase auxiliar en mi Controlador de aplicación

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include SessionsHelper 


end 

El signo en el método se llama a partir de controlador de la sesión

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 

Sin embargo, no puedo acceder a la variable 'current_user' de los usuarios # show view.

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


<% end %> 

Dice: undefined método `nombre' para nada: NilClass

Puede alguien aconsejar por favor? El método usuario_actual no recibe ninguna llamada del índice.

Respuesta

6

Poner include SessionsHelper en su controlador incluye aquellos métodos de módulo en el controlador, por lo que son accesibles en sus métodos de controlador. Desea que los métodos de ayuda estén disponibles en sus vistas, por lo que debe usar helper SessionsHelper en su controlador de aplicación.

Dicho esto, estoy de acuerdo con Jits en que los métodos que tiene en SessionsHelper realmente pertenecen en el controlador en lugar de en un ayudante.

+0

Gracias. Incluyendo el ayudante SessionsHelper resolvió el problema de acceso. –

1

Generalmente debe tener métodos como current_user definidos en su application_controller y luego ponerlos a disposición como ayudantes en las vistas. De esta forma, los controladores tienen acceso a ellos (y créanme, lo más probable es que necesiten acceso a cosas como esa). Ejemplo:

def current_user 
    .. 
end 
helper :current_user 
+0

Pero he incluido la clase Helper en ApplicationController. Vi algo similar en algún tutorial. Por lo tanto, fue de esta manera. –

+0

Acabo de agregar el <% si signed_in? %> fragmento de código en la vista. El signed_in? la función se llama. Pero no puede encontrar al usuario actual. –

+1

Creo que debería ser helper_method en lugar de helper –

Cuestiones relacionadas