2013-01-31 3 views
4

J'essayais ruby ​​sur les rails grâce au tutoriel situé au http://ruby.railstutorial.org. Je suis arrivé à au point où je pourrais créer des utilisateurs et ont leur nom et gravatar affiché à:méthode non définie chaque erreur de rails

http://localhost:3000/users/1 

Maintenant, je veux afficher tous les utilisateurs lorsqu'un utilisateur se rend à:

http://localhost:3000/users/ 

Voici mon contrôleur:

class UsersController < ApplicationController 

    def index 
    @user = User.all 
    end  

    #... 
end 

Voici ma 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> 

Je reçois l'erreur suivante. Est-ce que quelqu'un peut me dire pourquoi la page d'index ne fonctionne pas comme je le veux.

+3

renommer votre variable '@' @ user' à users' dans votre action index de votre contrôleur;) – MrYoshiji

+0

@MrYoshiji est juste, @user est unset et les variables d'instance prennent la valeur par défaut de 'nil' quand vous essayez d'y accéder, alors' @ users' est 'nil' mais' @ user' est défini. –

Répondre

12

Le problème vient de la variable @users qui n'existe pas:

Dans votre action d'index mis @user à tous les utilisateurs:

def index 
    @user = User.all 
end 

Par convention, nous utilisons des noms Pluralisé lorsque nous récupérons plusieurs entrées à partir de la base de données, c'est pourquoi vous appelez @users (notez les 's') dans la vue. Il suffit de renommer votre @user-@users et il sera ok;)

def index 
    @users = User.all 
end 
+0

Ok - Cela peut fonctionner mais pouvez-vous expliquer la raison - je veux dire que c'est une variable. droite ? et je ne connaissais pas une langue qui impose strictement une restriction sur le nom de la variable - alors pourquoi dans Rails – ImranNaqvi

+0

@ImranNaqvi Rails ne vous limite pas à utiliser un nom pluriel spécifique, mais c'est une convention de nommer vos variables en conséquence: '@ users' est le nom de la meilleure variable pour décrire une liste de plusieurs enregistrements 'User'. – MrYoshiji

+0

Ok c'est ma question i.e si les rails ne me restreignent pas et c'est seulement une convention, alors pourquoi donne-t-elle la méthode -undefined – ImranNaqvi

Questions connexes