2011-01-30 11 views
6

Ho avviato un'app Rails utilizzando lo scaffold. L'app mette in relazione le persone con le istituzioni. Quando vado aNessun percorso corrisponde al controller show - codice generato da scaffold

http://localhost:3000/people

ottengo il seguente errore:

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

(e così via)

Se rimuovo tutte le cellule "link_to" nella tabella scaffold-generated , la pagina si carica bene. Questo errore si verifica per tutti i file index.html.erb nella mia app.

Ecco la mia 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 %> 

E l'inizio dei miei controllori/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 

ed i risultati di rake routes

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"} 

e la migrazione per le persone

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 

e qui è il mio file routes.rb (meno le righe di commento che impalcature genera automaticamente):

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

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

end 

Ha qualcosa a che fare con la fissazione di un primary_key diverso per la tavola? Non sono sicuro che si tratti di un problema di modello o di percorsi. O qualcosa a cui non ho pensato. Ho riavviato il mio server di rotaie dopo l'impalcatura.

risposta

13

Provare a utilizzare person_path(person) anziché solo person sotto i collegamenti Mostra e Elimina.

Modifica: Non ho notato che stai utilizzando una chiave primaria diversa da quella predefinita id. Prova a utilizzare person_path(person.pid) anziché person_path(person).

+0

Ha dato un colpo. Lo stesso errore. :( – Libby

+0

Puoi pubblicare l'intero file routes.rb? –

+0

Certo, la domanda è stata modificata per includere routes.rb. È il modo giusto per rispondere? (Sono nuovo nello stackoverflow, sto ancora imparando il sistema) – Libby

1

poiché è stato scelto un valore diverso da quello predefinito ('id'), sarà necessario indicare al modello di utilizzarlo.

class Person < ActiveRecord::Base 

    set_primary_key "pid" 

end 
+1

Questo è ora deprecato. self.primary_key = "pid" ' – silasjmatson

1

Anche se non era il tuo caso, ho lottato per lo stesso problema per alcune ore, non capendo cosa diavolo fosse sbagliato.

Il codice era generato dallo scaffold, aveva funzionato prima, ma improvvisamente ha smesso di funzionare. Solo l'azione index ha smesso di funzionare con il seguente errore:

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

Il motivo per me non era che avevo un ID diverso (ho avuto set_primary_key "username", e che ha reso il lavoro resto senza cambiare nulla), ma che avevo introdotto un id con un punto: "test.est", e questo mi stava causando tutti i problemi.

Quindi, d'ora in poi, tutti i miei ID di stringa avranno (finché non troverò un'espressione regolare che accetta gli accenti (áéíóú ...):

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