Ich würde gerne wissen, was die "richtige" Art ist, die verschachtelten Felder eines Modells zu initialisieren.
Nehmen wir an, Sie haben einige verschachtelte Felder für ein Modell:
%Vor% Und Sie müssen diese Attribute initialisieren ( address
in diesem Fall), um sie in einem fields_for
Aufruf zu verwenden.
Bisher habe ich über drei Möglichkeiten nachgedacht.
Erstens, after_initialize
Haken am Modell:
Dann haben wir Initialisierung in der Steuerung:
%Vor%Und schließlich können wir eine Hilfsmethode für uns haben:
%Vor%Gibt es etwas, das einem Standard oder einer "Best Practice" für dieses Szenario ähnelt? Wie machst du es und warum?
Ich denke, wenn das verschachtelte Attribut ohne das übergeordnete Modell überhaupt keinen Sinn ergibt, sollte das Erstellen und Initialisieren dieser verschachtelten Modelle in der Verantwortung des übergeordneten Modells liegen.
Ich verstehe nicht, warum UsersController
darauf achten sollte, wie die @user.addresses
erstellt oder initialisiert werden. Wenn ich dem Controller diese Verantwortung gebe, würde das wahrscheinlich bedeuten, dass er auf create
derjenige sein sollte, der die verschachtelten Attribute analysiert und aufgebaut hat (was im Modell passiert).
Ich würde für den ersten Ansatz gehen.
Ich glaube, dass build_address bereits in Rails eingebaut ist, nachdem Sie eine has_one-Verknüpfung deklariert haben, so dass Sie diesen Bit nicht selbst schreiben müssen. und wenn das Formular nur von der neuen Aktion aufgerufen wird, brauchen Sie nur das Controller-Bit und sonst nichts
Tags und Links ruby ruby-on-rails model-view-controller