Actualmente estoy asistiendo a un tutorial de RoR (http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success es la sección relevante) que parece ser bastante bueno, aunque me he encontrado con el siguiente problema al intentar ver el sitio de muestra .variable local indefinida o método 'usuario_actual'
Extracted source (around line #10):
7: <li><%= link_to "Home", root_path %></li>
8: <li><%= link_to "About", about_path %></li>
9:
10: <% if signed_in? %>
11: <li><%= link_to "Profile", current_user %></li>
12: <li><%= link_to "Sign out", signout_path, :method => delete %></li>
13: <% else %>
Como puede ver, el problema se deriva de mi método "signed_in?" que se supone que comprobar si el usuario ha iniciado sesión o no comprobando si se establece la variable current_user (He incluido el resto del código del ayudante para dar un contexto, disculpas):
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
current_user = user
end
def sign_out
cookies.delete[:remember_token]
current_user = nil
end
def current_user= (user)
@current_user ||= user_from_remember_token
end
def signed_in?
!current_user.nil?
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
end
De mi entendimiento, .nil? ¿Es un método que verifica si un objeto ha sido o no definido y, por lo tanto, el objeto no definido no debería generar un error, sino devolver falso? Busqué en el tutorial todos los casos de current_user (antes de verificar si alguien más tuvo este problema con poco éxito) y mi código parece correcto, así que estoy un poco confundido y si alguien puede ayudarme a entender la forma en que las variables de Ruby son se supone que se debe acceder y por qué mi código no funciona, estaría muy agradecido.
Editar:
No estoy seguro de si es importante con el alcance que sólo estoy empezando ambos rieles y Ruby, sin embargo, el SessionsHelper ayudante está siendo utilizado por mi controlador de usuarios y puntos de vista (que está incluido en mis aplicaciones controlador)
o creo que podría hacer "@current_user || = user_from_remember_token || false" si quiere estar más en línea con su código actual. – JackCA
Si bien eso ciertamente detiene el error, constantemente devuelve falso. Supongo que es posible que haya un problema con mis métodos de inicio de sesión que hacen que un usuario_actual nunca se defina, por lo que probablemente sea mejor que lo vea después de una buena noche de sueño. – djlumley