Ich habe zwei Modelle: Kategorie und Anzeige. Kategorie has_many: Anzeigen + Ich habe hinzugefügt Counter-Cache: ads_count. Ich benutze Edelstein awesome_nested_set zu verschachtelten Kategorien, so kann Category1 Eltern/Kind von Category2 sein, die Eltern von Category3 usw. sein können. Was ich für meine Kategorien # Index brauche, ist die Gesamtsumme von Anzeigen, die zu bestimmten Kategorie oder Kind gehören Kategorie (oder "Enkel" usw.). Meine Lösung für jetzt ist: some_nested_categories.sum (: ads_count). Aber sagen wir, wenn ich viele viele Kategorien in meiner Indexseite habe, macht es viele Abfragen, um alle diese Daten abzurufen, und es dauert zu lange. Wie kann ich das effizienter machen? Danke für die Hilfe!Summe der Zählerstände für verschachtelte Modelle
Antwort
Sie könnten die Idee der counter_cache
manuell für eine Art von sum_cache
erweitern, können wir es nested_ads_count
nennen.
es dann 4 allgemeine Fälle werden würde, die behandelt werden müssen, wird
- eine Kategorie ein neues hinzufügen
- eine Kategorie „bewegt/hinzugefügt“ auf eine neue Hauptkategorie“
- eine Kategorie wird „
ein after_update
Rückruf, der die Eltern aktualisiert gelöscht (oder von einem übergeordneten entfernt) nested_ads_count
, wenn entweder der Strom oder die nested_ads_count
ads_count
Aktualisierungen. löst den ersten Fall.
awesome_nested_set löst die anderen 2 Fällen
Verwendung eines after_add
und after_remove
Rückrufe die nested_ads_count
neu berechnen.
Verfahren zu berechnen und die nested_ads_count
cachen wie diese
def reset_nested_ads_count
self.nested_ads_count = some_nested_categories.sum(:nested_ads_count) + self.ads_count
end
Diese Methode aussehen würde, ist optimal, wenn die Frequenz, dass die Zählung verwendet wird, ist größer als die Frequenz, dass es aktualisiert wird, da es die einzige tut zeitaufwendige Abfragen, wenn die Nummer aktualisiert würde, und nicht wenn die Nummer angezeigt werden soll.
Es gibt eine mögliche Fallgrube, die passieren kann, und das ist, wenn Sie eine Schleife in Ihrer Verschachtelung haben (a> b> a oder sogar heimtückischer a> b> c> ...> a) Sie können sich selbst erhalten in einer Endlosschleife. Ich habe nichts explizit gesehen, das besagt, dass "awesome_nested_set" diesen Fall blockiert.
- 1. Multinomiale Logit-Modelle und verschachtelte Logit-Modelle
- 2. ExtJs und verschachtelte Modelle
- 3. Rails verschachtelte Modelle
- 4. Aggregationsfaktor-Zählerstände - nach Faktor
- 5. Gift Encode Codierung verschachtelte Modelle
- 6. MVVM und verschachtelte Ansicht Modelle
- 7. Inkonsistente Zählerstände von Cassandra empfangen
- 8. Python verschachtelte Schleife berechnet Summe
- 9. Mongodb verschachtelte $ Gruppierung und $ Summe?
- 10. Wie erstellt man ein Formular für verschachtelte Modelle?
- 11. Backbone Relational - Deep verschachtelte Modelle/Kollektionen
- 12. Verschachtelte Modelle, Formulare und date_select FormHelper Integration
- 13. Verschachtelte Modelle und Sammlung in Backbonejs
- 14. Ecto Vorspannung und kommen verschachtelte Modelle
- 15. Meine verschachtelte Beziehung wechselt die IDs der Modelle
- 16. Rails „assign_attributes“ nicht verschachtelte Modelle zuzuweisen
- 17. Verschachtelte Modelle derselben 'Klasse' im Backbone.js-Framework?
- 18. Rails + Ember: Verschachtelte Modelle falsches Format
- 19. So finden Sie den Durchschnitt der Zählerstände mit Excel-Pivots
- 20. Java 8 verschachtelte Lambda-Funktion Summe der spezifischen Schlüssel finden
- 21. Python verschachtelte Liste: Rückgabe des Subarrays mit der größten Summe
- 22. django Modelle Manager für Content-Type Modelle
- 23. Summe der Sinus Passend für
- 24. Summe der Summe finden
- 25. Erhalten der Summe der Summe mit Unterabfrage
- 26. Kreuzvalidierung für glm() Modelle
- 27. Anzeigename für Modelle definieren
- 28. Datenbankentwurf für mehrere Modelle?
- 29. Namenskonvention für Django-Modelle
- 30. Ember.js: Berechnen Sie die Summe einer Eigenschaft aller Kind Modelle
sieht gut aus, thx – Mart17