2010-11-27 3 views
2

Gibt es eine bevorzugte Art und Weise eine Hierarchie von neuen Active Modell zu erstellen Objekte mit Assoziationen zu erstellen (zum Beispiel ein Modell zu schaffen, die Kinder has_many) innerhalb einer einzigen Aktion? Ist das nur etwas, das in separaten Bits gemacht werden sollte?Bevorzugt Art und Weise eine Hierarchie von neuen Activemodellobjekten innerhalb einer einzigen Aktion

Nehmen wir das Beispiel eines Blog-Post-Modell, das Kommentare has_many. Ich füge Unterstützung für den Autor des Blogposts hinzu, indem ich einen ersten Kommentar im selben Formular für den Blogpost hinzufüge. Gerade jetzt, was ich tue, ist einen after_create Aufruf im Blog-Post, die überprüft, ob es ein Kommentar, und die Blog-Post schafft einen Kommentar, wenn es vorhanden ist.

Ich dachte daran, den Kommentar mit einem ungesicherten Blogpost zu erstellen (.build), aber anscheinend funktioniert das nicht, da der Blogpost noch keine ID hat, da sie noch nicht gespeichert wurde. Ich bin daran interessiert, herauszufinden, welche Ansätze andere Leute angenommen haben.

Antwort

3

Meine Präferenz ist für verschachtelte Vordrucke.

Modelle:

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

class Post < ActiveRecord::Base 
    has_many :comments, :dependent => :destroy 
    accepts_nested_attributes_for :comments 
end 

Controller:

@post = post.new 
@post.comments.build 

Ausblick:

<% form_for @post do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </p> 
    <% f.fields_for :comments do |builder| %> 
    <p> 
    <%= builder.label :content, "Comment" %><br /> 
    <%= builder.text_area :content, :rows => 5 %> 
    </p> 
    <% end %> 
    <p><%= f.submit "Submit" %></p> 
<% end %> 
Verwandte Themen