2016-04-18 7 views
0

Ich habe ein Blog Modell, das verschiedene Zustände hat. Um einen mageren Controller zu behalten und der Konvention zu folgen, nur CRUD-Operationen pro Controller zu haben, folgte ich DHH's namespacing controllers pattern und nannte den Blog Controller.Form_for Namespaced Route für eine Ressource mit mehreren Zuständen

Jetzt habe ich einen Blogs::NewDraft Controller, einen Blogs::AwaitingApproval Controller und einen Blogs::Active Controller.

Ich habe folgende in meinem zum Erstellen eines neuen Entwurfs für ein Blog. Er arbeitet für einen neuen Rekord zu schaffen, aber es funktioniert nicht einen vorhandenen Datensatz zur Aktualisierung:

# app/views/blogs/new_drafts/_form.html.erb 
<%= form_for @blog, url: :blogs_new_drafts do |f| %> 
    ... 
<% end %> 

Wenn ich den Entwurf zu aktualisieren gehen, um es diesen Fehler führt:

No route matches [PATCH] "blogs/new_drafts"

Ich habe Probleme herauszufinden, warum es sagt, ein Routing-Fehler ist, wenn ich hier aktualisiert werden, da, wenn ich rake routes führen sie es für einen Patch blogs/new_drafts#update

Antwort

1

Ihre URL ändern Route hat:

<%= form_for @blog, url: :blogs_new_draft(@blog) do |f| %> 
    ... 
<% end %> 

Die URL für Ihre Erstellungsaktion unterscheidet sich von der Aktualisierung. Die Aktualisierungsaktions-URL muss wissen, welche Blog, die Sie versuchen, zu aktualisieren.

Das heißt, wenn Sie versuchen, _form mit den new und edit Ansichten zu teilen, wird nicht funktionieren, ein einzelnes form mit, da Sie benutzerdefinierte URLs bereitstellen, die zwischen diesen beiden Aktionen unterscheiden. Es gibt Möglichkeiten, damit es funktioniert (geben Sie die URL an die partielle/instanziieren die URL in Ihrem Controller als Variable/fügen Sie das Formular-Tag direkt zu Ihrer neuen/bearbeiten Ansichten/etc), aber etwas muss getan werden.

Verwandte Themen