ruby 没有与缺少必需关键字匹配的路由:[:标识]

li9yvcax  于 2022-11-04  发布在  Ruby
关注(0)|答案(5)|浏览(121)

我是Rails的新手,我似乎也遇到过类似的问题,但我不能解决我的问题。
我的路线:

resources :users do
    resources :items
end

我的模特:

class Item < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
   has_many :items
end

于飞:

<% @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]
gdx19jrr

gdx19jrr1#

您还需要包括用户,因为它是一个嵌套的路由。

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

ycggw6v22#

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

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。这是主要原因!

628mspwn

628mspwn3#

您在以下路径中遗漏了user_id

edit_user_item_path(user_id, item)

运行bundle exec rake routes | grep edit_user_item就能找到的格式

btqmn9zl

btqmn9zl4#

传递的是对象item,而不是所需的id。

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

4urapxun5#

〈%=链接到“编辑”,编辑用户项目路径(@用户,项目)%〉
并且在项目表单〈%= form_for([@user,@item])中执行|关闭|第1000章:我的天啊

相关问题