There is no route that matches the controller metric - generated forest code

I launched the Rails application using scaffold. The app connects people with institutions. When i go to

http: // localhost: 3000 / people

I get the following error:

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

(etc.)

If I delete all the "link_to" cells in the table created by the scaffold, the page loads just fine. This error occurs for all index.html.erb files in my application.

Here are my people /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 %> 

And the beginning of my controllers /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 

and the results of 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"} 

and migration for people

 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 

and here is my route.rb file (minus the commented lines that scaffolding automatically generates):

 IHiring::Application.routes.draw do resources :ranks, :departments, :institutions, :schools, :people get "home/index" root :to => "home#index" end 

Does it have anything to do with setting another primary_key for the table? I am not sure if this is a model or route problem. Or something that I didn’t think about. I restarted the rails server after scaffolding.

+6
ruby-on-rails routing
source share
3 answers

Try using person_path(person) instead of person under your "Show" and "Delete" messages.

Change I did not notice that you are using a different primary key than the standard id . Try using person_path(person.pid) instead of person_path(person) .

+13
source share

since you chose a different pk than rails default ('id'), you will need to say that your model uses this.

 class Person < ActiveRecord::Base set_primary_key "pid" end 
+1
source share

Despite the fact that this is not your business, for several hours I struggled with the same problem, not understanding what was actually wrong.

The code was generated from the scaffold, it worked before that, but it suddenly stopped working. Only the index action stopped working with the following error:

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

The reason for me was not that I had a different identifier (I had set_primary_key "username", and this did the job without changing anything), but I entered the identifier with a dot : "test.est", and this caused I have all the problems.

So now all my string identifiers will be (until I find a regular expression that takes accents (Ñéíóú ...):

 validates_format_of :username, :with => /^[-A-Za-z0-9]+$/ 
+1
source share

All Articles