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!
quelle
[@result, @course]
funktioniert,form_for(@result, url: { action: "create" })
funktioniert aber auch. Dies benötigt nur den letzten Modellnamen und den Methodennamen.Stellen Sie sicher, dass beide Objekte im Controller erstellt wurden:
@post
und@comment
für den Beitrag, z.Dann im Blick:
Stellen Sie sicher, dass Sie das Array explizit in form_for definieren und nicht nur wie oben durch Kommas getrennt.
quelle
Sie müssen keine besonderen Dinge in der Form tun. Sie erstellen den Kommentar einfach korrekt in der Show-Aktion:
und erstellen Sie dann ein Formular dafür in der Artikelansicht:
Standardmäßig geht dieser Kommentar zu der
create
Aktion vonCommentsController
, die Sie dann wahrscheinlich einfügen möchten,redirect :back
damit Sie zurück zurArticle
Seite geleitet werden.quelle
form_for([@article, @new_comment])
Format verwenden. Ich denke, das liegt daran, dass ich die Aussicht fürcomments#new
nicht zeigearticle#new_comment
. Ich denke, inarticle#new_comment
Rails ist es klug genug, herauszufinden, in was das Kommentarobjekt verschachtelt ist, und müssen Sie es nicht angeben?