没有路线匹配丢失所需的键:
我是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。 希望这可以帮助。