Werner Laude wrote:
Controller:
var1 = Model_a.create(params[:params1])
var2 = Model_b.new(params[:params2])
var1.var2 = var2

speichert die Daten ab. Gut.
Der Aufruf Model_a.create lässt die Validierung laufen, und *speichert* falls alles gut geht. Die spätere zuweisung var1.var2 = var2 speichert laut ActiveRecord API Dokumentation auch var2 in der Datenbank. Daher würde ich davon ausgehen dass die Validierung für beide Objekte abläuft. Du kannst das mal ganz einfach debuggen, wenn du dir var1.errors und var2.errors ausgeben lässt (zB mit nem breakpoint).

Ich denke dass dein Problem ist, dass Du nicht alle errors in der View ausgibst, und nur die "error_messages_for" funktion für var1 aufrufst (die schreibt NUR die fehler von var1 raus), nicht aber die errors von var2.

Im Controller ist alles richtig, jedoch wird, falls var2 nicht valid ist, var1 dennoch abgespeichert. Daher würde ich es eher so schreiben:
var2 = Model_b.new(params[:params2])
var1 = Model_a.new(params[:params1].merge(:var2 => var2) )
if var1.valid? && var2.valid?
 var1.save!
 var2.save!
end

Damit bist Du auf der sicheren Seite, auch wenn es sicherlich eleganter geht. Interessant könnte für Dich auch validates_associated sein, damit kannst Du sagen dass ein Model_a nur valid ist, wenn das Model_b auch validiert.

Hoffe das hilft.

Gruß
Thomas


_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Antwort per Email an