Rails Quicktipp: Stolperfalle bei “accepts_nested_attributes_for”
Gerade bin ich über Fehler gestolpert, der so nicht hätte passieren dürfen.
Ich benutze für eines meiner Projekte neuerdings “accepts_nested_attributes_for”. Dies ist dazu da, in einem nested-form (d.h. Ein Formular mit Eltern und Kindelementen) beim Speichern des Elternelements auch gleichzeitig alle Kindelemente zu speichern. Wirklich gutes Feature. Eine genauere Erklärung bekommt ihr bei Railscasts und in der API.
Aber Achtung Stolperfalle!
Dieser Code stand bei mir im Model und verhinderte erfolgreich (ohne Fehlermeldung), dass Kindelemente gespeichert wurden:
-
class Hotel < ActiveRecord::Base
-
attr_accessible :kontingent, :name
-
-
has_many :hotel_days, :dependent => :destroy
-
accepts_nested_attributes_for :hotel_days
-
-
validates_presence_of :name
Eigentlich kein Problem, auch meine Tests liefen ohne Probleme durch. Doch beim Speichern über das Formular selbst wurden die Kindelemente (in diesem Fall hotel_days) nicht gespeichert.
Schuld daran ist die Zeile
-
attr_accessible :kontingent, :name
denn hier werden nur Kontingent und Name aus dem Formular gespeichert (da nur diese beiden Attribute erlaubt sind), nicht aber die Kindelemente. Ich konnte das Problem mit
-
attr_accessible :kontingent, :name, :hotel_days_attributes
lösen.
Fazit:
Immer wirklich alle benötigten Formwerte auch über attr_accessible erlauben.
Kategorie: Rails, Tipps | 1 Kommentar »
Veröffentlicht am Donnerstag, den 4. März 2010 um 11:01 Uhr veröffentlicht
Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.
