Je suis actuellement en cours d'un tutoriel RoR (http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success est la section pertinente) qui semble être assez bon, même si j'ai rencontré le problème suivant en essayant de voir le site d'exemple .variable locale non définie ou méthode 'current_user'
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 %>
Comme vous pouvez le voir, le problème provient de ma méthode "signed_in?" qui est censé vérifier si l'utilisateur est connecté ou non en vérifiant si la variable current_user est définie (j'ai inclus le reste du code de l'aide pour donner un contexte, des excuses):
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 ma compréhension, .nil? est une méthode qui vérifie si un objet a été défini et, par conséquent, l'objet non défini ne doit pas générer d'erreur mais renvoyer plutôt faux? J'ai cherché le tutoriel pour tous les cas de current_user (avant de vérifier si quelqu'un d'autre avait ce problème avec peu de succès) et mon code semble correct, donc je suis un peu confus et si quelqu'un peut m'aider à comprendre la façon dont les variables Ruby sont supposé être accessible et pourquoi mon code ne fonctionne pas, je serais très reconnaissant.
Edit:
Je ne sais pas s'il est important de portée que je commence juste deux Rails et Ruby, mais le SessionsHelper d'aide est utilisé par mon contrôleur des utilisateurs et des vues (il est inclus dans mes applications contrôleur)
ou je crois que vous pourriez faire "@current_user || = user_from_remember_token || false" si vous voulez être plus en ligne avec votre code actuel. – JackCA
Bien que cela arrête certainement l'erreur, il revient constamment faux. Je suppose qu'il est possible qu'il puisse y avoir un problème avec ma méthode de connexion qui fait qu'un current_user ne soit jamais défini, alors c'est probablement mieux pour moi d'y jeter un coup d'œil après une bonne nuit de sommeil. – djlumley