méthode non chaque rails d'erreur
J'ai essayé ruby on rails dans le tutoriel situé à http://ruby.railstutorial.org.
J'ai pu, au point où je pouvais créer des utilisateurs et de leur nom et de gravatar affiché à:
http://localhost:3000/users/1
Maintenant, je veux afficher tous les utilisateurs lorsqu'un utilisateur accède à:
http://localhost:3000/users/
Voici mon controller:
class UsersController < ApplicationController
def index
@user = User.all
end
#...
end
Voici mon point de vue.
#View for index action in user's controleer
<h1>All users</h1>
<ul class="users">
<% @users.each do |user| %>
<li><%= user.content %></li>
<% end %>
</ul>
J'obtiens l'erreur suivante.
undefined method `each' for nil:NilClass
Quelqu'un peut-il me dire pourquoi la page d'index ne fonctionne pas comme je veux.
renommer votre variable
Est droit, @utilisateur n'est pas défini et l'instance des variables prennent la valeur par défaut de
@user
à @users
dans votre action index de votre contrôleur 😉Est droit, @utilisateur n'est pas défini et l'instance des variables prennent la valeur par défaut de
nil
lorsque vous essayez d'y accéder, de sorte @users
est nil
mais @user
est réglé.OriginalL'auteur Micheal | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Le problème vient de la
@users
variable qui n'existe pas:Dans votre action index vous définissez
@user
à tous les utilisateurs:Par convention, nous utilisons la marque du pluriel des noms quand nous récupérer plusieurs entrées à partir de la DB, c'est pourquoi vous appelez
@users
(notez le "s") dans la vue. Il suffit de renommer votre@user
à@users
et ce sera ok 😉Rails n'est pas de vous imposer des restrictions spécifiques à utiliser la marque du pluriel du nom, mais c'est une convention pour nommer vos variables en conséquence :
@users
est le meilleur de la variable de nom pour décrire une liste de plusieursUser
enregistrements.Ok ma question je.e si les rails est de ne pas me restreindre et ce n'est qu'une convention, alors pourquoi il donne l'erreur undefined method chaque
parce que vous n'avez pas utiliser la même variable nom de la vue. Si vous définissez
@whatever = User.all
dans votre action de contrôleur, vous devrez utiliser la variable@whatever
dans la vue.OriginalL'auteur MrYoshiji