In der Videoplattform muß ich von einer Form auf zwei Models zugreifen. Wie das geht, will ich mal kurz erläutern:
- in eurer new-Action des Controllers - der auch die Form "entgegennimmt" - instanziert ihr zwei Objekte der betreffenden Models:
def new
@presentation = Presentation.new
@slide = Slide.new
...
end
- in der Form werden die zwei Objekte nun angegeben
<%= file_field :presentation, :uploaded_data %>
<%= file_field :slide, :create_pictures %>
- das wirklich "interessante" passiert nun in der create-Action
def create
@presentation = Presentation.new(params[:presentation])
@slide = @presentation.slides.build(params[:slide])
respond_to do |format|
if @presentation.save
...
end
@presentation wird wie gewohnt angelegt. Doch bei @slide nehmen wir uns die build-Methode zur Hilfe. Sie legt @slide an, als ob wir es mit Slide.new anlegen würden und fügt @slide direkt noch @presentation zu. So werden bei @presentation.save auch direkt beide Objekte gespeichert, wenn alles ok ist.
Comments (2)
Ich würde für das Speichern von Objekt-Netzen die save!-Methode verwenden. Sie wirft eine Exception, wenn das Speichern eines Details fehlschlägt.
Die save-Methode informiert Dich nur darüber, ob das Objekt gespeichert wurde, das Du als Parameter übergeben hast. Über nicht gespeicherte assoziierte Objekte wirst Du nicht informiert. (Zumindest nicht mit Rails 1.x)
Posted by Phillip Ghadir | December 20, 2007 8:57 PM
Posted on December 20, 2007 20:57
Danke für die Info!
Posted by Tim | December 20, 2007 11:22 PM
Posted on December 20, 2007 23:22