Rails - undefined method `nom' for nil:NilClass
Question rapide. Voici mon code:
#routes
map.resources :customers, :has_many => [:addresses, :matchings]
map.connect ":controller/:action/:id"
#url path:
http://127.0.0.1:3000/customers/index/3
#customers controller
def index
@customer = Customer.find(params[:id])
end
#customers view/index.html.erb
...
<%= @customer.name %>
...
Erreur: undefined method `nom' for nil:NilClass.
Voici mon raisonnement. Le paramètre :l'id est à venir à partir de mon chemin d'accès d'url (c'est à dire que nous sommes à la recherche pour client #3 ci-dessus, au chemin d'accès). @client doit trouver ce tableau facilement, alors @client.le nom doit produire le nom, mais apparemment, @clientèle est vide. Pourquoi?
Je suppose que le problème est que je ne suis pas la production d'un tableau dans mon contrôleur?
------ mise à JOUR------
Salut Larry, merci beaucoup pour les commentaires.
Ce que je veux dire par "index" est en fait une page d'accueil que les clients vont frapper lorsqu'ils se connectent au site. (J'ai aussi des connexions séparées pour les autres utilisateurs, tels que les employeurs et ils vont à leur propre index). Je suis actuellement en utilisant la liste comme une liste de clients et de "spectacle" d'une personne... est-il un meilleur moyen?
Deuxième et la PLUS importante: les journaux ne sont pas de me donner la réponse au problème fondamental, qui est l'incapacité à afficher la page.
Processing CustomersController#index (for 127.0.0.1 at 2010-05-16 16:56:19) [GET]
Parameters: {"action"=>"index", "id"=>"10", "controller"=>"customers"}
...
[4;36;1mCustomer Load (2.0ms)[0m [0;1mSELECT * FROM "customers" WHERE ("customers"."id" = 10) [0m
[4;35;1mMatching Load (24.0ms)[0m [0mSELECT * FROM "matchings" WHERE ("matchings".customer_id = 10) [0m
Completed in 153ms (View: 18, DB: 26) | 200 OK [http://127.0.0.1/customers/index/10]
------ mise à JOUR #2 (dernier!) ------
J'ai lu tous vos commentaires et ils m'ont aidé non seulement à faire des progrès sur mon problème, mais aussi en apprendre davantage sur la façon dont les pièces s'assemblent. Pour cela, merci à tous.
Alex est droit à mes voies ne sont pas doublure de la façon dont ils ont besoin. J'ai créé une nouvelle action à mon client, un contrôleur appelé à la Maison. C'est la maison du client lors de l'ouverture de la session (il n'a pas d'afficher les informations concernant un client, donc il est préférable de ne pas le montrer, et ce n'est pas une liste afin de ne pas être d'index ou de la liste).
Rake routes # ...gives me a list of routes that does NOT include home. Why?
Deuxième, si l'itinéraire affiché, par exemple:
:action => "home"
/customers # (instead of what I need, '/customers/:id')
que dois-je faire pour modifier cet itinéraire, pour accepter un :id?
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à
rake routes
. L'action index pour une ressource ne correspond pas à un numéro d'identification. Je soupçonne Rails de ne même pas mettre l'id dans les paramètres de l'indice de l'action. Comme Ryan a dit, vous devriez être en utilisant la fin de l'action, et l'URL de l'action show serahttp://localhost:3000/customers/3
.Si vous allez utiliser Reposant ressources, vous voudrez probablement de se débarrasser de la valeur par défaut
map.connect ":controller/:action/:id"
route.matchings
et l'utiliser pour afficher la page d'atterrissage (l'URL sera /clients/3/filtrages). Alternativement, vous pourriez faire des couplages d'un ensemble de ressources pour les clients, ce qui permettra d'acheminer la même URL pour l'action "index" dans les Couplages de contrôleur, mais je ne sais pas si c'est possible étant donné que vous avez une plusieurs-à-plusieurs relations (c'est à dire l'Appariement doit être imbriquée des ressources à la fois les clients et les employeurs).Je pense que vous êtes vraiment faire une demande à la
show
d'action, pas de laindex
action. Placer ce code à l'intérieur de l'action show.Regarder dans votre journal pour voir les paramètres envoyés à votre contrôleur et l'action.
Aussi, vous n'êtes pas couvrant le cas où un id non valide est donné à votre contrôleur.
Par exemple, devrait être plus comme:
Ajouté:
Aussi noter que dans le standard RESTE de style, l'index doit être une liste de clients. Pour afficher un client spécifique, généralement un "spectacle" est utilisé.
Votre requête de Client.find(params[:id]) retourne une instance du modèle Client ou nul. Si vous voulez un tableau de Clients, il sera plus comme Client.find(:all)
Ajouté --
Votre journal est de montrer que votre action est appelée correctement. Ressemble à trouver votre déclaration n'est pas de travail. Utilisation de la console et assurez-vous que le Client.find("10") vous donne le résultat que vous attendez.