Rails 4 - Eager lädt auf abhängige Auswahl verursacht Fehler (Rails4 / Active Admin)

9

Ich habe ein aktives Panel mit einer abhängigen Auswahl, d. h. die Auswahl in der ersten Dropdown-Liste beeinflusst, was in der zweiten Dropdown-Liste angezeigt wird.

Vor ein paar Monaten hat alles sehr gut funktioniert, aber ich habe erst gestern festgestellt, dass es nicht mehr funktioniert.

Ich habe herausgefunden, was den Fehler verursacht: Wenn ich den Eager loading ("include") entferne, funktioniert es wieder.

FUNKTIONIERT NICHT: (aktuelle Version):

%Vor%

Ich erhalte diesen Fehler (Formular der Konsole von chrome dev tools)

%Vor%

WORKING, wenn ich "include" / eager loading entfernen:

%Vor%

Es funktioniert perfekt in diesem Fall.

Aber ich möchte wirklich gerne Subsektoren laden, also frage ich mich, was diesen Fehler verursacht, was sich geändert hat, seit es funktioniert hat. Ich habe ein paar Annahmen, aber ich kann den Schuldigen nicht finden.

  • Hat Rails 4 die Art geändert, wie ich find (params [: id] ..) verwenden soll oder wie ich eifrig laden soll

  • hat der aktive Admin die Art und Weise geändert, wie er das eifrige Laden bearbeitet: vielleicht funktioniert es nur auf dem Index und nicht auf den Bearbeitungsseiten ...

  • haben Turbolinks jetzt auf Rails 4 die Art geändert, wie ich eifrig laden muss?

Hier ist der Code:

- auf Active Admin

%Vor%

- das Formular mit den 2 abhängigen Auswahlfeldern

%Vor%

- das Javascript, das es antreibt:

%Vor%

ADDED-Datei

%Vor%     
Mathieu 08.06.2015, 18:56
quelle

3 Antworten

1

Rails 4 enthält einige Änderungen in Bezug auf den Eager-Lade-Algorithmus. Sie können die folgenden Codefragmente in Ihrem Fall ausprobieren:

%Vor%

oder

%Vor%

der erste wird die Daten in einer einzelnen Abfrage abrufen, aber der zweite wird zwei Abfragen durchführen.

    
meOn 14.06.2015, 18:48
quelle
2

Wenn Sie ActiveRecord::find aufrufen, bedeutet das, dass Sie ein einzelnes Modell aus der DB erwarten. Dann beziehen Sie sich auf dieses Modell und rufen dealsubsectors auf - ich nehme an, es ist has_many Beziehung zu Ihrem Modell. Es wird 2 Anfragen erzeugen: erstens, um original DealSelector zu holen, zweitens alle zusammen DealSubsectors . Es gibt nichts, was Sie optimieren können (außer Sie dealsubsectors ist eine benutzerdefinierte Methode in Ihrem Modell, nicht die Relation).

Wenn Sie sehen, dass etwas Ihre DB mit Abfragen trifft - müssen Sie an anderer Stelle suchen. Sagen Sie, Ihr Formular - zeigen Sie nur einen Client pro Formular an? Ist dies nicht der Fall, werden alle DealSector- und DealSubsector-Elemente für jeden neuen Client erneut iteriert und abgerufen. Versuchen Sie, mehr Code bereitzustellen.

    
shlajin 11.06.2015 15:27
quelle
0

Warum können Sie nicht einfach alle DealSubsektor-Datensätze für das angegebene sector_id abrufen?

%Vor%     
Yury Lebedev 12.06.2015 13:41
quelle