2011-01-30 9 views
6

Inicié una aplicación de Rails con andamio. La aplicación relaciona a las personas con las instituciones. Cuando voy aNinguna ruta coincide con la demostración del controlador - código generado en el andamio

http://localhost:3000/people

me sale el siguiente error:

No route matches {:controller=>"people", :action=>"show", :id=>#<Person pid: 302, name: 

(y así sucesivamente)

Si quito todas las células "link_to" en la tabla generada andamio , la página se carga bien Este error ocurre para todos los archivos index.html.erb en mi aplicación.

Aquí está mi gente/index.html.erb

<h1>Listing people</h1> 

<table> <tr> <th></th> 
    <th></th> 
    <th></th> 
    <th></th> </tr> 

<% @people.each do |person| %> <tr> <td><%= person.name %></td> 
    <td><%= link_to 'Show', person %></td> 
    <td><%= link_to 'Edit', edit_person_path(person) %></td> 
    <td><%= link_to 'Destroy', person, :confirm => 'Are you sure?', :method 
=> :delete %></td> </tr> <% end %> </table> 

<br /> 

<%= link_to 'New Person', new_person_path %> 

Y el comienzo de mis controladores/people.rb

class PeopleController < ApplicationController 
    # GET /people 
    # GET /people.xml 
    def index 
    @people = Person.all(:order => "year_grad, name") 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @people } 
    end 
    end 

    # GET /people/1 
    # GET /people/1.xml 
    def show 
    @person = Person.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @person } 
    end 
    end 

y los resultados de rutas rastrillo

people GET /people(.:format)    {:controller=>"people", :action=>"index"} 
POST /people(.:format)    {:controller=>"people", :action=>"create"} 
new_person GET /people/new(.:format)   {:controller=>"people", :action=>"new"} 
edit_person GET /people/:id/edit(.:format)  {:controller=>"people", :action=>"edit"} 
person GET /people/:id(.:format)   {:controller=>"people", :action=>"show"} 
PUT /people/:id(.:format)   {:controller=>"people", :action=>"update"} 
DELETE /people/:id(.:format)   {:controller=>"people", :action=>"destroy"} 
home_index GET /home/index(.:format)   {:controller=>"home", :action=>"index"} 
root  /(.:format)      {:controller=>"home", :action=>"index"} 

y la migración para personas

class CreatePeople < ActiveRecord::Migration 
    def self.up 
    create_table :people, :id => false, :primary_key => :pid do |t| 
     t.integer :pid, :null =>false 
     t.string :name 
     t.string :degree 
     t.integer :phd_area 
     t.string :thesis_title 
     t.integer :year_grad 
     t.integer :instid_phd 
     t.integer :year_hired 
     t.integer :instid_hired 
     t.integer :schoolid_hired 
     t.integer :deptid_hired 
     t.string :email 
     t.string :notes 
     t.integer :hire_rankid 
     t.integer :tenure_track 
     t.integer :prev_instid 
     t.integer :prev_rankid 
    end 
    end 

    def self.down 
    drop_table :people 
    end 
end 

y aquí está mi archivo routes.rb (menos las líneas de comentarios que los andamios genera automáticamente):

IHiring::Application.routes.draw do 
    resources :ranks, :departments, :institutions, :schools, :people 

    get "home/index" 
    root :to => "home#index" 

end 

¿Tiene algo que ver con el establecimiento de un primary_key diferente para la mesa? No estoy seguro de si es un problema de modelo o ruta. O algo en lo que no he pensado Reinicé el servidor de mis rails después del andamiaje.

Respuesta

13

Pruebe usar person_path(person) en lugar de solo person en sus enlaces Mostrar y Eliminar.

Editar: No he notado que está utilizando una clave principal diferente a la predeterminada id. Intente usar person_path(person.pid) en lugar de person_path(person).

+0

Lo apreté. Mismo error. :( – Libby

+0

¿Puedes publicar todo tu archivo routes.rb? –

+0

Claro. Pregunta editada para incluir routes.rb. ¿Es esa la forma correcta de responder? (Soy nuevo en stackoverflow, sigo aprendiendo el sistema) – Libby

1

ya que ha elegido un pk diferente al predeterminado de los rieles ('id'), tendrá que indicarle a su modelo que lo use en su lugar.

class Person < ActiveRecord::Base 

    set_primary_key "pid" 

end 
+1

Esto ya no está disponible. Querrá usar ' self.primary_key = "pid" ' – silasjmatson

1

Aunque no fue su caso, he estado luchando por el mismo problema durante algunas horas, sin entender qué demonios estaba mal.

El código se generó a partir de scaffold, había funcionado antes, pero de repente dejó de funcionar. Sólo la acción index dejó de funcionar con el siguiente error:

No route matches {:action=>"show", :controller=>"users", :id=>"...."} 

La razón para mí no era que tenía un ID diferente (que tenía set_primary_key "nombre de usuario", y que hizo el resto trabaja sin cambiar nada), pero que había introducido una identificación con un punto: "test.est", y que me estaba causando todos los problemas.

Así que, de ahora en adelante, todos mis identificadores de cadena tendrán (hasta que encuentre una expresión regular que acepte acentos (áéíóú ...):

validates_format_of :username, :with => /^[-A-Za-z0-9]+$/ 
Cuestiones relacionadas