没有路线匹配丢失所需的键:

我是Rails的新手,看起来类似的问题,但我解决不了。

我的路线:

resources :users do resources :items end 

我的模特:

 class Item < ActiveRecord::Base belongs_to :user end class User < ActiveRecord::Base has_many :items end 

HTML:

 <% @items.each do |item| %> <tr> <td><%= item.id %></td> <td><%= item.code %></td> <td><%= item.name %></td> <td><%= item.quantity %></td> <td><%= link_to "Edit", edit_user_item_path(item) %></td> <---- error 

而且我得到同样的错误:

 No route matches {:action=>"edit", :controller=>"items", :user_id=>#<Item id: 1, user_id: 1, code: "123", name: "test", quantity: 12, , created_at: "2014-02-11 15:45:30", updated_at: "2014-02-11 15:45:30">, :id=>nil, :format=>nil} missing required keys: [:id] 

你也需要包含用户,因为它是一个嵌套的路线。 所以像这样:

 <td><%= link_to "Edit", edit_user_item_path(@user, item) %></td> 

问题是你正在使用嵌套的资源:

 resources :users do resources :items end 

所以当你有一个链接:

 <%= link_to "Edit", edit_user_item_path(item) %> 

它将缺less一个user_id所以很容易检查问题是使用rake routes 。 它会列出这样的路线:

 edit_user_item GET /users/:user_id/items/:id/edit(.:format) items#edit 

你可以看到上面的路线,并检查它的链接,你会看到它没有user_id 。 这是主要原因!

对象item正在被传递,而不是所需的ID。

 <td><%= link_to "Edit", edit_user_item_path(item.id) %></td> 

您在以下path中错过了user_id:

 edit_user_item_path(user_id, item) 

格式,你可以find只是运行bundle exec rake routes | grep edit_user_item bundle exec rake routes | grep edit_user_item

我有嵌套资源的编辑path相同的问题。 我试着谷歌周围的解决scheme,但没有发现过去两天的结果。然后,我决定了解如何嵌套的资源遵循这篇文章(这确实是一个关于嵌套资源的好文章)。 http://blog.8thcolor.com/en/2011/08/nested-resources-with-independent-views-in-ruby-on-rails/ 。 答案在这里: http : //www.reddit.com/r/rails/comments/2oryqf/no_route_matches_missing_required_keys_id/

Rails:没有路由匹配…缺less必需的键:[:id]

我的问题是因为我在嵌套的编辑path中使用对象的未被执行/未保存的实例引起的。由于您没有发布控制器代码,我猜你是在某处创build项目的未保存的实例,并传递到嵌套的编辑path。 希望这可以帮助。