Meine Elternklasse lädt manchmal nicht alle ihre untergeordneten Elemente in einem after_save
Rückruf durch das Kind.Rails-Verbindung wird nicht korrekt geladen
Ich habe zwei Modelle:
class Parent < ActiveRecord::Base
has_many :children
def update_something
# explained below
end
end
class Child < ActiveRecord::Base
belongs_to :parent
after_save :tell_parent_to_update
def tell_parent_to_update
parent.update_something
end
end
ich einen Test habe ich darauf laufen, die zwei Dinge einfach überprüft. parent.children.count
und parent.children.length
. Beides sollte 4 sein. Mir ist klar, dass die Anzahl manchmal anders ist, aber (so weit ich weiß) sollte es nicht hier sein.
Wenn ich update_something
definieren, um nur iterieren children
:
def update_something
children.each do |child|
end
end
der Test nicht bestanden - die Schleife einmal ausgeführt wird (und wird das Feld von einem einzigen Kind zurückgeben - die erstenchild
erstellt) .
Ansonsten kann ich jeden Code setzen, solange es children
nicht erwähnt und es wird funktionieren. Es ist so, als ob der Anruf bei Kindern dazu führt, dass die Assoziation die falsche Sache lädt.
einen Reload Erzwingen behebt es:
def update_something
children(true).each do |child|
end
end
aber das ist Hacky und ich würde lieber die Wurzel Problem beheben, wenn möglich.
Ist das mein Bug oder ein Rails Bug (und wenn ja, kann ich etwas dagegen tun)?
Ich bezweifle, dass es darauf ankommt, aber dies ist eine Testumgebung mit sqlite3. Es wird jedoch auch in einer Entwicklungsumgebung fehlschlagen, wenn ich die Datensätze in einer einzigen Dev-Konsolensitzung erstelle und teste.
'children.each do | child |' oder 'Children.each do | child |'? –
vielleicht etwas mit Keywords zu tun, nur Raten. – Nithin
Das dachte ich auch zuerst, aber im echten Code ist es jetzt sehr isoliert, und die eigentlichen Namen der Modelle/Methoden sind extrem domänenspezifisch und leider keine Schlüsselwörter –