2011-02-27 11 views
27

Estoy intentando construir un modelo de usuario manualmente (sin utilizar' resources: users 'en el archivo routes.rb). Mi archivo routes.rb se ve así:método indefinido `user_path '

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

Este es mi método de índice en el controlador de los usuarios:

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

Este es mi punto de vista índice:

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

consigo este error mensaje cuando presiono localhost: 3000/all_users:

undefined method `user_path' 

No veo de dónde viene esto, ¿alguien puede ayudar ...?

EDIT:

Ok, he descubierto que el cambio de 'usuario' a '@user' en la vista hace que funcione:

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

Pero realmente no entiendo el mensaje de error , o la diferencia real entre 'usuario' y '@ usuario'. Además, al hacer clic en el enlace creado no se redirige a la página del usuario, sino que permanece en localhost: 3000/all_users.

Respuesta

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

debería ser

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

El parámetro :as le dice al router qué nombre como la ruta (A continuación, puede añadir o _path_url a lo que el parámetro es :as).

Además, cada vez que se vincule directamente a un modelo de ActiveRecord (por ejemplo, link_to user.email, user), intentará convertir user en .

+0

Gracias, funciona muy bien! – newUserNameHere

+14

para cualquiera que use rieles 4 use esto en su lugar 'get'/users /: id ',: to =>' users # show ',: as =>: user' –

+0

Gracias. funciona encanto! –

1

Para todos los que el uso de los carriles 4 en su routes.rb post '/users', :to => 'users#create', :as => :user y controlador render json: @user, status: :created, location: @user_path

Cuestiones relacionadas