我使用脚手架开始了一个Rails应用程序.该应用程序将人与机构联系起来当我去
我收到以下错误:
No route matches {:controller=>"people",:action=>"show",:id=>#<Person pid: 302,name:
(等等)
如果我删除脚手架生成的表中的所有“link_to”单元格,页面加载就好了.我的应用中的所有index.html.erb文件都会发生此错误.
这是我的人/ 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 %>
而我的控制器/ 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
和耙路线的结果
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"}
和人民的迁移
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
这是我的routes.rb文件(减去脚手架自动生成的注释行):
IHiring::Application.routes.draw do resources :ranks,:departments,:institutions,:schools,:people get "home/index" root :to => "home#index" end
是否与为表设置不同的primary_key有关?我不确定它是模型还是路由问题.或者我没想过的东西.我在脚手架后重新启动了我的rails服务器.
解决方法
尝试使用person_path(person)而不只是使用Show和Delete链接下的person.
编辑:我没有注意到您使用的是与默认ID不同的主键.尝试使用person_path(person.pid)而不是person_path(person).