Ich habe eine zweiteilige Frage zu form_for und verschachtelten Ressourcen. Angenommen, ich schreibe eine Blog-Engine und möchte einen Kommentar zu einem Artikel verknüpfen. Ich habe eine verschachtelte Ressource wie folgt definiert:
map.resources :articles do |articles|
articles.resources :comments
end
Das Kommentarformular befindet sich in der Ansicht show.html.erb für Artikel unter dem Artikel selbst, beispielsweise wie folgt:
<%= render :partial => "articles/article" %>
<% form_for([ :article, @comment]) do |f| %>
<%= f.text_area :text %>
<%= submit_tag "Submit" %>
<% end %>
Dies gibt einen Fehler aus, "ID für Null aufgerufen, was fälschlicherweise usw. wäre." Ich habe es auch versucht
<% form_for @article, @comment do |f| %>
Dies wird korrekt gerendert, bezieht sich jedoch f.text_area auf das Textfeld des Artikels anstelle des Kommentarfelds und zeigt den HTML-Code für das Attribut article.text in diesem Textbereich an. Also scheine ich das auch falsch zu haben. Was ich möchte, ist ein Formular, dessen 'Senden' die Erstellungsaktion auf CommentsController aufruft, mit einer Artikel-ID in den Parametern, zum Beispiel einer Post-Anfrage an / articles / 1 / Kommentare.
Der zweite Teil meiner Frage lautet: Wie kann die Kommentarinstanz am besten erstellt werden? Ich erstelle einen @ -Kommentar in der Show-Aktion des ArticlesController, sodass ein Kommentarobjekt für den form_for-Helfer in den Bereich fällt. Dann erstelle ich in der Aktion create des CommentsController ein neues @comment mit den aus form_for übergebenen Parametern.
Vielen Dank!