undefined variable locale ou de la méthode 'current_user'
Je suis en train de passer par un RoR tutoriel (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 couru dans le problème suivant lorsque j'essaie de visualiser le site d'échantillonnage.
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 est issu de ma méthode "signed_in?" qui est censé vérifier si l'utilisateur est connecté ou non en vérifiant si l'current_user variable 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
À partir de ma compréhension .néant? est une méthode qui vérifie si un objet n'a pas été défini et, par conséquent, l'objet non défini ne pas générer une erreur mais plutôt return false? J'ai cherché sur le tutoriel pour tous les cas de current_user (avant de vérifier pour voir si quelqu'un d'autre a eu ce problème avec peu de succès) et mon code semble correct, donc je suis un peu confus et si quelqu'un est capable de m'aider à comprendre la façon dont Ruby variables sont censés être accessibles et pourquoi mon code ne fonctionne pas je lui en serais très reconnaissant.
Edit:
Je ne sais pas si c'est important avec la portée que je suis juste de commencer, les deux Rails et Ruby, cependant l'aide SessionsHelper est utilisé par mes Utilisateurs contrôleur et points de vue (il est inclus dans mes Applications de contrôleur)
OriginalL'auteur djlumley | 2010-11-13
Vous devez vous connecter pour publier un commentaire.
J'ai couru à cette même question, & c'était pour la même raison. Vous avez négligé une partie des instructions sur la Liste 9.16'.
Que vous étiez censé changer pour la suite.
Vous voudrez aussi de modifier toutes les occurrences de *la maîtrise de soi.*current_user à *@*current_user.
Une fois que vous faites cela, l'erreur(s) sont résolus.
OriginalL'auteur Mentat
Assurez-vous que vous avez le code suivant dans le SessionHelper
OriginalL'auteur Thorpe Obazee
Le néant? la méthode n'est pas d'aller vérifier si une variable ou une méthode est définie. Il s'agit uniquement de vérifier si elle est définie comme un néant de l'objet ou pas. Ruby promenades les ancêtres de la chaîne pour SessionsHelper et, enfin, détermine que current_user n'est pas définie n'importe où (il sera finalement fin au Noyau#method_missing), puis renvoie une erreur. La façon la plus rapide de résoudre le problème serait:
Alors que certainement cesse de l'erreur, il est constamment retourner false. Je suppose que c'est possible qu'il pourrait y avoir un problème avec ma signature dans les méthodes qui cause une current_user de ne jamais être défini de manière sans doute mieux pour moi d'avoir un coup d'oeil après une bonne nuit de sommeil.
OriginalL'auteur Patrick Robertson
J'ai demandé à un ami, et il a corrigé mes erreurs. Je pense qu'une grande partie de mon erreur venait de ne pas être tout à fait familier avec la portée des variables en Ruby et en oubliant que tout est un objet et, par conséquent, la méthode current_user=(utilisateur) a été substitution de la fonction affectation.
Mon ami, la solution est de changer le champ d'application de current_user à une variable instanciée (de sorte qu'il peut être utilisés correctement), et modifier la fonction curent_user=(utilisateur) à un simple get_current_user fonction afin de déterminer si l'utilisateur existe dans le cookie.
La finale changé le code est comme suit:
Comme vous pouvez le voir la variable dans l'en-tête partiel a également été modifiée afin de tenir compte de la méthode utilisée dans l'aide pour obtenir de l'utilisateur.
Va commencer la lecture de certains de base Rubis guides alors, la prochaine fois que je passe au-dessus de ma tête, j'ai une idée de par où commencer à corriger 🙂
Est-il une raison particulière à cela? Ou est-il, comme la plupart des Rails, les choses semblent être, simplement parce que c'est comment les gens font? Je peux voir une augmentation de la lisibilité, je me demandais si il y a une autre raison que je suis absent.
Ce n'est pas seulement un Rails de chose. Le Rubis de la convention pour les getters et les setters est attribute_name() et attribute_name=(). La capacité à ajouter ? pour les noms de méthode a été intentionnelle, de sorte que les développeurs puissent forme cohérente des questions. Ruby est conçu pour être aussi de la conversation que possible.
OriginalL'auteur djlumley