2016-06-29 15 views
0

Ich habe ein Open House für eine bestimmte Auflistung erstellt. Ich versuche jetzt, eine RSVP-Funktion hinzuzufügen. Ich bekomme immer einen Fehler und ich kann es nicht herausfinden. Ich bin sicher, es ist etwas Dummes, aber ich sehe es einfach nicht.Nicht Controller-Methode mit verschachtelten Ressourcen

Rake Routen:

rsvp_listing_open_house GET /listings/:listing_id/open_houses/:id/rsvp(.:format) open_houses#rsvp     

Meine Routen:

resources :listings do 
    member do 
    get 'like' 
    get 'unlike' 
    get 'duplicate' 
    get 'gallery' 
    delete 'gallery' => 'listings#clear_gallery' 
    get 'manage_photos' 
    get 'craigslist' 
    get "add_to_collection" 
    get 'request_photos' 
    end 
    resources :open_houses do 
    member do 
     get 'rsvp' 
    end 
    end 
    resources :listing_feedbacks do 
    member do 
     get 'archive_feedback' 
    end 
    end 
end 

Mein Controller:

def rsvp 
    @open_house_rsvp = params[:open_house_rsvp] 
    agent_id = params[:agent_id] 
    open_house_id = params[:open_house_id] 
    OpenHouseRsvp.create(:agent_id => agent_id, :open_house_id => open_house_id) 
    flash[:notice] = "Your RSVP has been submitted!" 
    redirect_to listing_open_houses_path 
end 

Ausblick:

<%= link_to "RSVP", rsvp_listing_open_house_path %> 

Fehler:

ActionController::UrlGenerationError in OpenHouses#index 

No route matches {:action=>"rsvp", :controller=>"open_houses", :listing_id=>"5341"} missing required keys: [:id] 
+0

Konnten Sie den Fehler posten, den Sie erhalten? – Leito

+2

Es sieht so aus, als würden Sie keine ID oder ein Objekt an den Pfadhelfer als Argument übergeben, daher weiß es nicht genau, welche ': ID' für die Route verwendet werden soll. – Zoran

+0

Hat die Fehler gepostet. Das tut mir leid. –

Antwort

1

Nach dem Fehler bereitgestellt, wobei der Pfad Helfer bereits eine :listing_id empfangen und ist ein :id von einem offenen Haus Objekt erwartet, so dass es richtig den Weg konstruieren kann. Angenommen, Sie sind ein @open_house Objekt in Ihrem Controller definiert haben, sollten Sie Ihren Weg Helfer wie folgt aussehen:

<%= link_to "RSVP", rsvp_listing_open_house_path @open_house %> 

hoffe, das hilft!

+0

Die Wurzel benötigt zwei Objekte, "Listing" und "House". –

+0

Wenn ich @open_house hinzufüge, erhalte ich einen neuen Fehler. Keine Route stimmt überein {: action => "rsvp",: controller => "open_houses",: id => null,: listing_id => nil} fehlende erforderliche Schlüssel: [: id,: listing_id] –

+1

@NicNilov Das listing_id In diesem speziellen Fall wird aus der Seite, auf der die Verknüpfung gerendert wird, gemäß der bereitgestellten Ausnahme geschlossen. – Zoran

0

Ich habe nicht genug Ruf Kommentar schreiben so Zusammenfassung nur die Kommentare von Zoran und Nic oben:

  • rsvp_listing_open_house_path erfordert 2 params: listing_id, open_house_id, können Sie rsvp_listing_open_house_path(@listing, @open_house) oder rsvp_listing_open_house_path(@listing.id, @open_house.id)
  • Stellen Sie sicher, dass Sie @listing und @open_house in Ihrer Controller-Aktion zur Verfügung haben (Sie können sie anders benennen). Andernfalls erhalten Sie den in Ihrem Kommentar erwähnten Fehler: No route matches {:action=>"rsvp", :controller=>"open_houses", :id=>nil, :listing_id=>nil} missing required keys: [:id, :listing_id]
+0

Also habe ich eine Tabelle open_house_rsvps, die das RSVP ausfüllen soll. In dieser Tabelle gibt es open_house_id und agent_id. Warum muss ich die Angebots-ID eingeben? –