Je suis nouveau sur Rails) et j'ai des problèmes similaires, mais je ne peux pas résoudre le mien.
Mes itinéraires:
resources :users do
resources :items
end
Mes modèles:
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
Et je reçois la même erreur:
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]
Vous devez également inclure l'utilisateur car il s'agit d'un itinéraire imbriqué. Donc, quelque chose comme:
<td><%= link_to "Edit", edit_user_item_path(@user, item) %></td>
Le problème est que vous utilisez des ressources imbriquées:
resources :users do
resources :items
end
Alors, quand vous avez un lien:
<%= link_to "Edit", edit_user_item_path(item) %>
Il manquera un user_id
il est donc facile de vérifier le problème en utilisant rake routes
. Et il listera les routes comme ceci:
edit_user_item GET /users/:user_id/items/:id/edit(.:format) items#edit
Vous pouvez voir les itinéraires ci-dessus et vérifier avec le lien, vous verrez qu'il n'a pas user_id
. C'est la raison principale!
L'objet item
est en cours de transmission au lieu de l'identifiant requis.
<td><%= link_to "Edit", edit_user_item_path(item.id) %></td>
Vous avez manqué user_id
Dans le chemin suivant:
edit_user_item_path(user_id, item)
format que vous pouvez trouver simplement en cours d'exécution bundle exec rake routes | grep edit_user_item