我使用脚手架启动了一个Rails应用程序。该应用程序将人与机构联系起来当我去
我收到以下错误:
No route matches {:controller=>"people", :action=>"show", :id=>#<Person pid: 302, name:
(依此类推)
如果我删除了scaffold生成的表中的所有“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服务器。
答案 0 :(得分:13)
在显示和删除链接下尝试使用person_path(person)
而不只是person
。
修改:我没有注意到您使用的是与默认id
不同的主键。尝试使用person_path(person.pid)
代替person_path(person)
。
答案 1 :(得分:1)
因为您选择了与rails default('id')不同的pk,所以您需要告诉您的模型使用它。
class Person < ActiveRecord::Base
set_primary_key "pid"
end
答案 2 :(得分:1)
即使不是你的情况,我也一直在努力解决同样的问题几个小时,而不是理解究竟是什么问题。
代码是从脚手架生成的,以前它曾经工作过,但它突然停止工作了。只有索引操作停止了以下错误:
No route matches {:action=>"show", :controller=>"users", :id=>"...."}
我的原因并不是因为我有一个不同的id(我有set_primary_key“用户名”,这使得其余的工作没有改变任何东西),但是我引入了一个 id带点:“test.est”,这给我带来了麻烦。
所以,从现在开始,我的所有字符串id都会有(直到我找到一个接受重音的正则表达式(áéíóú...):
validates_format_of :username, :with => /^[-A-Za-z0-9]+$/