2010-12-09 5 views
1

In meiner Rails3 Anwendung ich ein bestimmtes Spiel für edit mein Post Modell wie hinzufügen:Rails: Render-Aktionen mit einem bestimmten Pfad

match '/edit' => 'posts#edit', :as => 'post_edit' 

Also, ich überschreibe den Standardpfad der edit Aktion. - Wenn jetzt bei der Aktion update ein Fehler auftritt, wird die edit Aktion mit der Einstellung des URL-Pfads mit dem Standardpfad edit Pfad /posts/1 gerendert.

Wie kann ich das überschreiben, um die edit Aktion mit der Einstellung der URL-Pfad als /edit statt posts/1 rendern.

Antwort

0

Sie sehen tatsächlich die URL für "update", der Standardpfad für die Bearbeitung wäre /posts/1/edit. Ich denke nicht, dass Sie in der Lage sein werden, zu ändern, was die URL unter Verwendung render :action anzeigt. Eine alternative, wenn auch etwas schlampige Methode wäre, das @post-Objekt in der Sitzung oder im Flash umzuleiten und zu speichern. Wenn Sie das @post-Objekt nicht speichern, gehen die Fehlermeldungen des Updates verloren.

if @post.update_attributes(params[:post]) 
    #business as usual 
else 
    session[:post] = @post 
    redirect_to post_edit(@post) 
end 

Beachten Sie, dass es eine schlechte Praxis ist das ganze Objekt in der Sitzung (besonders große Objekte) zu speichern, so können Sie stattdessen wollen nur mit dem Blitz der Fehlermeldung Zeichenfolge senden und machen, dass in der Ansicht. Das sind beides ziemlich haschische Methoden, aber ich sehe keinen eleganten Weg, dies zu tun.

Aus Neugier, warum möchten Sie die Standard-URL ändern? Ist es nötig?

+1

Eigentlich würde die URL '/ posts/1/edit' – nathanvda

+0

tatsächlich, Sie sind richtig ;-) Danke für den Fang! Antwort aktualisiert – johnmcaliley

Verwandte Themen