Ich verwende Ruby 2.2.1 und Rails 4.2, um eine App zu erstellen. Bei einer meiner Ansichten habe ich folgende Nachricht erhalten:
N + 1 Abfrage erkannt Politiker = & gt; [:Konto] Zu deinem Finder hinzufügen:: includes = & gt; [: Konto]
N + 1 Abfragemethoden-Aufrufstapel
app / models / user.rb: 19: in 'Konto'
app / controllers / home_controller.rb: 6: in 'index'
Hier ist meine Aktion zu Hause Controller:
%Vor%Und der relevante Abschnitt des Benutzermodells:
%Vor%Ich habe bereits folgendes versucht:
%Vor%Aber ich bekomme nur den Fehler:
%Vor%Ich habe etwas recherchiert und es scheint, dass es nur Arbeiten für Beziehungen beinhaltet (was nicht der Fall ist).
Ist die Kugel umsonst? Was kann ich tun, damit dies keine N + 1-Abfrage ist?
Danke!
includes
kann nur in ActiveRecord::Relation
s oder ActiveRecord::Base
untergeordneten Klassen aufgerufen werden, account
scheint ein Modell zu sein, reagiert also nicht auf ActiveRecord::Relation
Methoden wie includes
. Es scheint ein falsches positives Ergebnis von bullet
zu sein, sobald du nur ein Konto von current_user
bekommst, obwohl ich Delagierungen für Assoziationen nicht empfehle, es kann zu N + 1 Problemen in der Funktion führen.
Ersetzen von Delagate durch AR-Zuordnung:
Unter der Annahme, dass Account
ein normales ActiveRecord
-Modell ist, können Sie has_one
macro verwenden (siehe Dokumentation für weitere Details):
Es ist sehr handvoll, wenn Sie Benutzer durchlaufen müssen:
%Vor%Tags und Links ruby ruby-on-rails activerecord performance ruby-on-rails-4