it-swarm.com.de

Keine Route stimmt mit fehlenden erforderlichen Schlüsseln überein: [: id]

Ich bin neu in Rails und ich habe ähnliche Probleme, aber ich kann meine nicht lösen.

Meine Routen:

resources :users do
    resources :items
end

Meine Modelle:

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

Und ich erhalte den gleichen Fehler:

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]
41
letz

Sie müssen auch den Benutzer einbeziehen, da es sich um eine verschachtelte Route handelt. Also so etwas wie:

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

Das Problem ist, dass Sie verschachtelte Ressourcen verwenden:

resources :users do
   resources :items
end

Also, wenn Sie einen Link haben:

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

Es wird ein user_id Fehlen, so dass das einfache Überprüfen des Problems rake routes Verwendet. Und es wird die Routen wie folgt auflisten:

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

Sie können die Routen oben sehen und mit dem Link überprüfen, Sie werden sehen, dass es nicht user_id Hat. Das ist der Hauptgrund!

8
hainguyen

Das Objekt item wird anstelle der erforderlichen ID übergeben.

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

Sie haben user_id Im folgenden Pfad verpasst:

edit_user_item_path(user_id, item)

format, das Sie finden können, läuft nur bundle exec rake routes | grep edit_user_item

4
itsnikolay