Ich habe zwei Modelle mit einer Eins-zu-viele-Assoziation. Ich möchte einen Standardwert für das untergeordnete Modell bei der Initialisierung basierend auf einem bestimmten Status des übergeordneten Elements festlegen. Dies beinhaltet ein Callback nach dem Initialisieren von Callbacks auf das Kind, das über die assignes_to-Assoziation auf das Elternobjekt zugreifen muss. Das Problem besteht darin, dass bei der Instanziierung des untergeordneten Elements mit der build-Methode die Zuordnung zum übergeordneten Element im after_initialize-Callback null ist. Ist das erwartetes Verhalten? Ich bin auf Schienen 3.0.6
Ein Spielzeugbeispiel:
%Vor%Und in einem Controller:
%Vor%Im Aufruf von set_default_value ist Händler null, obwohl es nicht zu sein scheint.
Ich würde den Code wie folgt ändern:
%Vor%Ändern Sie dann Ihren Anrufer zu:
%Vor%Außerdem habe ich festgestellt, dass Callbacks nach_initialisieren langsam sind. Eine weitere Option besteht darin, die Logik in den Builder für das Produkt zu verschieben.
%Vor%Dadurch wird auch das Gesetz des Demeter-Verstoßes gegen den Kodex beseitigt (d. h. das Produkt sollte nicht wissen, was der Zustand des Händlers ist).
Ich bin auf Schienen 2.3 und ich kann das bestätigen
%Vor%gibt die richtige merchant_id-Zuordnung nicht in einem after_initialize-Rückruf
zurückaber ich habe festgestellt, dass es mit
korrekt funktioniert %Vor%Ich denke, es wurde mit diesem Commit behoben (ich weiß es nicht wirklich, ich kenne den Git-Workflow nicht wirklich):
Weil es in Rails 3.1.11 sowohl für build
als auch für new
Tags und Links ruby-on-rails-3 ruby-on-rails