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