2016-03-29 12 views
0

Ich habe ein User Modell, das has_many shifts und Shift Modell, die zu einem user gehören. Ich versuche herauszufinden, warum ich einen No Route Match-Fehler bekomme.Keine passende Route in Rails 4

In routes.rb:

get 'users/:id/shifts' => 'users#shifts', :as => :user_shifts 
resources :shifts 

Ich habe eine Route wie:

user_shifts GET /users/:id/shifts(.:format)   users#shifts 

und ich benutze es in meinem nav Blick auf die Seite verlinken, wie:

<li><%= link_to "Shifts", user_shifts_path(@shifts) %></li> 

in mein Users Controller:

def shifts 
    @user = User.find(params[:id]) 
    @shifts = @user.shifts 
end 

Benutzer/shifts.html.erb:

<% @shifts.each do |shift| %> 
    <%= shift.start_time %> 
<% end %> 

Der Fehler:

No route matches {:action=>"shifts", :controller=>"users", :id=>nil} missing required keys: [:id] 

aber wenn ich in der URL manuell eingeben http://localhost:3000/users/7/shifts, funktioniert es?

Ich habe alles mit Antworten auf verwandte Fragen versucht, aber kann anscheinend nichts zur Arbeit bekommen. Kann jemand bitte helfen?

Trace:

app/views/layouts/_nav.html.erb:24:in `_app_views_layouts__nav_html_erb__2914379975493970040_70146050606840' 
app/views/layouts/application.html.erb:13:in `_app_views_layouts_application_html_erb___3858195360324705958_70145981089600' 

Antwort

0

sollten Sie folgendes verwenden:

<li><%= link_to "Shifts", user_shifts_path(@user) %></li>

Inplace von:

<li><%= link_to "Shifts", user_shifts_path(@shifts) %></li>

user_shifts_path erwartet user.

Update:

Versuchen <li><%= link_to "Shifts", user_shifts_path(id: @user.id) %></li>

Und wenn ein Fehler auftritt, wenden Sie sich bitte die Fehlermeldung sowie die Stacktrace schreiben.

+0

ich nicht funktioniert versucht ([@user, @shift]) fand den Fehler weg, aber dann bekam ich einen Fehler so etwas wie 'könnte notfind id' – Mohammed

+0

die aktualisierte Lösung versuchen. – Dharam

+0

'undefinierte Methoden-ID 'für Nil: NilClas' Ich habe auch die Spur aktualisiert nicht wissen, ob Sie die vollständige Spur benötigen! – Mohammed

0

haben Sie versuchen: -

user_shifts_path(:id=>@shifts) 
+0

Sorry das hat nicht funktioniert – Mohammed

0

Versuchen Sie, diese

<%= link_to "Shifts", {:action=>"shifts", :controller=>"users", :id=>@user.id } %> 

oder

mit
<%= link_to "Shifts", user_shifts_path(id: @user.id) %> 
+0

'undefined Methode ID 'für Nil: NilClas' für beide von ihnen Methoden – Mohammed

+0

es bedeutet @user von Shifts-Methode ist Null. Bitte überprüfen Sie es und stellen Sie sicher, dass dies nicht leer sein kann. – Anna88

1
<li><%= link_to "Shifts", user_shifts_path(@shifts) %></li> 

Hier @shifts ein Objekt ist. Sie müssen die Benutzer-ID in Variablen @shifts übergeben. Sein so etwas wie dies

<li><%= link_to "Shifts", user_shifts_path(@user.id) %></li> 
Verwandte Themen