2016-12-13 7 views
1

Ich habe ein Formular:Formular-URL ohne ID-Parameter?

form_for :comment, url: comment_path, method: :post do |f| 

Nach dem Rendern dieses

<form action="/comments/1" accept-charset="UTF-8" method="post"> 

wird ich die action nur "/comments" ohne id erwarten würde zu sein, denn das ist der tatsächliche Weg ist, einen neuen Kommentar für die Erstellung von . Und natürlich bekomme ich eine nette Fehlermeldung, dass mein Weg ist ungültig:

No route matches [POST] "/comments/1" 
... 
comments_path GET  /comments(.:format)  comments#index 
       POST /comments(.:format)  comments#create 
... 

Was mache ich falsch, dass die ID in die Tat umgesetzt werden?

Antwort

1

Sie haben comment_path verwendet, was die Route show/edit/destroy ist. Verwenden Sie stattdessen comments_path.

4

Verwenden Konvention über Konfiguration statt:

# comments/_form.html.erb 
<%= form_for(@comment) %> 
<% end %> 

# comments/new.html.erb 
<%= render partial: 'form' %> 

Wenn @comment ein neuer Datensatz ist, wird er den Pfad comments_path und für einen vorhandenen Datensatz verwenden wird es comment_path(@comment) und setzen Sie die Methode verwenden, um Patches. Dadurch können Sie die gleiche Form teilweise in verschiedenen Ansichten verwenden.

Sie müssen die Optionen path und method nur wirklich einstellen, wenn Sie etwas außerhalb der normalen CRUD-Operationen ausführen.