« Liste der Änderungen in Rails 2.0 | Main | attachment_fu und PDF-Verarbeitung »

Eine Form zwei Models in Rails

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.

TrackBack

TrackBack URL for this entry:
http://www.innoq.com/movabletype/mt-tb.cgi/2949

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)

Tim:

Danke für die Info!

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)

About

This page contains a single entry from the blog posted on December 20, 2007 10:22 AM.

The previous post in this blog was Liste der Änderungen in Rails 2.0.

The next post in this blog is attachment_fu und PDF-Verarbeitung.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31