Track-Summe einiger Felder in der Assoziation - "sum_cache"

9

Ich habe Tabellen 'orders' und 'items' mit has_many association im Modell.

%Vor%

Der Artikel besteht aus dem Feld "Menge" und der Auftrag besteht aus dem Feld "quantity_sum", um die Summe der zugehörigen Artikelmengen zu verfolgen.

Für zB:

%Vor%

Ich habe nach einem Weg gesucht, so dass jedes Mal, wenn ein neuer Artikel hinzugefügt / bearbeitet / gelöscht wird, das Feld "quantity_sum" von Order automatisch aktualisiert wird. Zur Zeit verwende ich die Methode "after_save" in Item, um das Feld "quantity_sum" von Order zu aktualisieren.

Gibt es neben 'After_Save' noch eine andere Möglichkeit, dies zu tun?

Ähnlich wie "counter_cache" zum Verfolgen der Anzahl von Assoziationen, unterstützt Rails automatisch die Summe einiger Felder in der Assoziation?

Danke

    
jayandra 08.08.2011, 08:49
quelle

2 Antworten

3

Entfernen Sie das Feld quantity_sum aus Ihrer Tabelle und fügen Sie der Orderklasse, die die quantity_values ​​zusammenfasst, eine Methode quantity_sum hinzu %Vor%

Sollte es tun. Sie müssen dann nur den Code entfernen, der das Feld quantity_sum aktualisiert. Sie werden feststellen, dass der Name der Methode mit dem Feldnamen identisch ist (Sie dürfen nicht vergessen, ihn zu löschen), Sie müssen also keinen Code umprogrammieren, der ihn nutzt.

Offensichtlich müssen Sie darauf achten, dieses Feld nicht unnötigerweise wie in einer Liste aller Aufträge im System zu verwenden, da dies für die Datenbank ziemlich schwer ist. O.K für ein paar hundert Datensätze, aber Sie werden ein Leistungsproblem über Tausende von Bestellungen bemerken.

Vergessen Sie nicht, das Feld quantity_sum aus der Auftragstabelle

zu entfernen     
jamesc 08.08.2011 12:40
quelle
0

Ich denke, dieses Juwel ist was du suchst.
Sehen Sie unter "Summieren statt Zählen" in den Dokumenten nach.
Es sollte Ihnen erlauben, so etwas zu tun:

%Vor%     
Rubinsh 09.02.2016 07:28
quelle