Keine Route passt zu fehlenden erforderlichen Schlüsseln: [:id]

Lesezeit: 2 Minuten

Benutzer-Avatar
letz

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

Meine Strecken:

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 bekomme 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]

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

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

  • sollte das nicht lauten: edit_user_item_path(item.user, item)?

    – Hescham

    11. Februar 2014 um 17:11 Uhr

  • Sie könnten das tun, aber Sie verwenden normalerweise verschachtelte Routen, weil Sie die zuweisen möchten @user Variable, die in der Ansicht verwendet werden soll. Wenn Sie nicht verwenden @user Dann benötigen Sie möglicherweise keine verschachtelte Route.

    – jklina

    11. Februar 2014 um 17:15 Uhr

  • Ja, das macht Sinn.

    – Hescham

    11. Februar 2014 um 17:21 Uhr

  • Können Sie mir für den Fall sagen, dass ich form_for verwende? was soll ich setzen?

    – letz

    11. Februar 2014 um 18:52 Uhr

  • <%= form_for([@user, @item]) do |f| %> ... <% end %> Dokumente sind hier: api.rubyonrails.org/classes/ActionView/Helpers/…

    – jklina

    11. Februar 2014 um 19:00 Uhr


Benutzer-Avatar
Hai Nguyen

Das Problem ist, dass Sie verschachtelte Ressourcen verwenden:

resources :users do
   resources :items
end

Wenn Sie also einen Link haben:

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

Es wird eines fehlen user_id So ist das Problem einfach zu überprüfen rake routes. 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 keine gibt user_id. Das ist der Hauptgrund!

  • Das hat mir geholfen, alle Informationen zusammenzuklicken, vielen Dank.

    – Lotix

    3. Februar 2016 um 13:37 Uhr

Benutzer-Avatar
esnikolay

Du hast es versäumt user_id in folgendem Pfad:

edit_user_item_path(user_id, item)

Format finden Sie gerade läuft bundle exec rake routes | grep edit_user_item

  • Ich hatte NIE darüber nachgedacht, den Ausgang zu verrohren bundle exec rake routes grep. Brillant.

    – Tasch

    5. Juli 2016 um 15:27 Uhr

Das Objekt item wird anstelle der erforderlichen ID übergeben.

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

1256330cookie-checkKeine Route passt zu fehlenden erforderlichen Schlüsseln: [:id]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy