28 votes

méthode non définie `user_path '

Je suis en train de construire un utilisateur manuellement au modèle (sans l'aide de ressources :des utilisateurs dans les itinéraires.rb fichier). Mes itinéraires.rb fichier ressemble à ceci:

match '/users/:id', :to => 'users#show'
match '/all_users', :to => 'users#index'

C'est ma méthode de l'indice dans le contrôleur:

def index
  @title = "All users"
  @users = User.paginate(:page => params[:page])
end

C'est ma vue "index":

<h1>All users</h1>
<%= will_paginate %>
<ul class="users">
  <% @users.each do |user| %>
    <li>
      <%= link_to user.email, user %>
    </li>
  <% end %>
</ul>
<%= will_paginate %>

Je reçois ce message d'erreur lorsque je tape localhost:3000/all_users:

undefined method `user_path'

Je ne vois pas d'où ça vient, peut aider quelqu'un..?

EDIT:

Ok, j'ai découvert que la modification de 'utilisateur' à '@user' dans la vue permet de travailler:

<%= link_to user.email, @user %>

Mais je ne comprends vraiment pas le message d'erreur, ou la vraie différence entre "utilisateur" et " @ "l'utilisateur". De Plus, en cliquant sur le lien créé ne redirige pas vers la page des utilisateurs, il reste sur localhost:3000/all_users.

61voto

Dylan Markow Points 65796
 match '/users/:id', :to => 'users#show' 
 

devrait être

 match '/users/:id', :to => 'users#show', :as => :user
 

Le paramètre :as indique au routeur comment nommer la route (vous pouvez ensuite ajouter _path ou _url à tout ce que le paramètre :as est ).

De plus, chaque fois que vous vous connectez directement à un modèle ActiveRecord (par exemple link_to user.email, user ), il essaiera de transformer user en user_path .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X