没有路由匹配缺少的必需键:\[:id\]

新手上路,请多包涵

我是 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]

原文由 letz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 254
2 个回答

您还需要包括用户,因为它是嵌套路由。所以像:

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

原文由 jklina 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 resources :users do
   resources :items
end

所以当你有一个链接时:

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

它将缺少一个 user_id 因此使用 rake routes 很容易检查问题。它会列出这样的路线:

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

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

原文由 Hai Nguyen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题