私は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) %>
1つ不足しますuser_id
ので、問題を簡単に確認するにはrake routes
。そして、次のようなルートがリストされます。
edit_user_item GET /users/:user_id/items/:id/edit(.:format) items#edit
上記のルートを確認し、リンクで確認してください。user_id
。それが主な理由です!
必要なIDの代わりにオブジェクトitem
が渡されています。
<td><%= link_to "Edit", edit_user_item_path(item.id) %></td>
user_id
は次のパスにあります。
edit_user_item_path(user_id, item)
実行中のbundle exec rake routes | grep edit_user_item