Подтвердить что ты не робот

Нет совпадений маршрутов с отсутствующими необходимыми ключами: [: 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]
4b9b3361

Ответ 1

Вам также нужно включить пользователя, так как его вложенный маршрут. Так что-то вроде:

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

Ответ 2

Проблема в том, что вы используете вложенные ресурсы:

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. Это главная причина!

Ответ 3

Объект item передается вместо требуемого id.

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

Ответ 4

Вы пропустили user_id по следующему пути:

edit_user_item_path(user_id, item)

вы можете найти только что запущенный bundle exec rake routes | grep edit_user_item