Ich habe folgende Modelle bekam Meine RequestsController
Ich nehme die Anfragen mit ihren hub_posts
und und dann eine JSON-Antwort (ich verwende active_model_serializers 0.10.4 mit dem :json
Adapter) wie folgt:Hinzufügen umfassen Argument Methode machen nicht beheben N + 1 Abfrage
Dies ist natürlich ein offensichtliches N + 1-Problem (das das Bullet-Juwel überraschenderweise nicht aufzugreifen scheint). Wenn ich die Protokolle anschaue, kann ich eine SELECT
Erklärung für jede hub_post sehen. Jetzt habe ich versucht, einschließlich likes
wie so:
requests = current_contact.requests.includes(hub_post: [:contact, :likes])
requests = current_contact.requests.includes(hub_post: [contact: [:likes]])
Interessant ist, dass das Bullet Juwel nicht auf das N nicht abholen + 1, noch Scout tut.
Ich habe auch versucht, gemäß den documentation ein include
Argument meiner Render-Methode hinzufügen, etwa so:
respond_to do |format|
format.json { render json: requests, include: 'hub_posts,hub_posts.likes', each_serializer: PortalRequestSerializer, scope: current_contact }
end
Ich versuchte auch, wie so einstufig und Multi-Level-Wildcards:
respond_to do |format|
format.json { render json: requests, include: '*', each_serializer: PortalRequestSerializer, scope: current_contact }
end
respond_to do |format|
format.json { render json: requests, include: '**', each_serializer: PortalRequestSerializer, scope: current_contact }
end
Aber nichts, was ich tue, scheint das N + 1 zu beseitigen. Ich bin mir nicht sicher, ob dies ein Problem damit ist, wie das Juwel die Beziehungen in verschachtelten Serialisierern behandelt oder ob ich gerade etwas verpasse.
UPDATE
Hier ist eine gist der Abfrage von dem Server-Protokoll.
Nein. Versuchte dies, tat nichts für mich. – ACIDSTEALTH
Ich denke, da ist etwas Verwirrung. Ist es "likes", dass du das N + 1-Problem hast, oder "hub_posts" und "contacts"? –
Mit Blick auf Ihre Assoziationen, ich bin nicht ganz sicher, warum Sie versuchen, "Kontakte" unter 'hub_posts' ('Anfragen = current_contact.requests.includes (Hub_post: [: Kontakt,: likes]))') wenn 'Anfragen 'sind direkt mit' contacts' verbunden und 'hub_posts' sind nicht –