Ich habe zZ eine Seite, die 11 Sekunden dauert, um zu laden. Ich benutze den Bullet Gem, um mir zu helfen, herauszufinden, wo die N + 1-Abfrage stattfindet. Es gibt ein bisschen Leistung, aber ich weiß wirklich nicht, was ich damit anfangen soll. Hier ist die Ausgabe von Einschuss:Implementieren Sie eifriges Laden, um N + 1 zu stoppen - Schienen
GET /events/1679/dashboard
USE eager loading detected
RSVP => [:tickets]
Add to your finder: :includes => [:tickets]
Call stack
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/decorators/rsvp_decorator.rb:54:in `tickets?'
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/views/accepted_rsvps/_list.html.erb:33:in `block in _app_views_accepted_rsvps__list_html_erb___1211423417683052584_70339569780320'
Und es sagt mir, es auf dieser Linie zu setzen
def tickets?
rsvp.tickets.any?
end
Hier ist der Verein:
has_many :tickets, through: :attendees
attendee.rb
has_one :ticket
Normalerweise bezieht sich das auf etwas, das über eine Liste dieser Dinge iteriert und 'tickets? 'Auf jedem einzelnen aufruft. Dieser Code wird nicht gezeigt, aber vermutlich haben Sie eine Liste von multipleple ... was auch immer diese sind. – tadman
Schau dir deine Logs an! Wenn Sie feststellen, dass die Datenbank mehrmals für eine Anforderung betroffen ist, haben Sie wahrscheinlich eine N + 1-Situation. Sie können das Eager-Laden verwenden, um die Datenbank nur einmal zu treffen, um die zugehörige Tabelle zu erfassen und dann die Datensätze zu laden. – bkunzi01
Wenn ich Fragen wie diese sehe, fühle ich mich verpflichtet, auf diese Antwort zu verlinken: http://stackoverflow.com/a/26251892/525478. YMMV –