Rails association nil in after_initialize

8

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.

    
Dino 02.06.2012, 18:01
quelle

3 Antworten

1

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).

    
Jason Noble 16.07.2012 14:50
quelle
0

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ück

aber 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

funktioniert     
vinhboy 14.03.2013 17:31
quelle
0

Sie suchen wahrscheinlich nach inverse_of

%Vor%     
albandiguer 17.05.2016 23:03
quelle