Preload workshop_host in DashboardQuery.upcoming_events_for_user (per-workshop N+1 on /dashboard)

Offen Anfängerfreundlich
#3,070 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@davidmillen50 arbeitet bereits daran.

Seit 02.11.2026.

  • #3074 von @davidmillen50 — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
82/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rails, ruby
Bereich
backend, database

Rechercherichtung

Beginne in app/queries/dashboard_query.rb etwa bei den Zeilen 27-40, wo upcoming_events_for_user eager_load(:sponsors) verwendet, ohne den Workshop-Host zu laden. Prüfe, wie Workshop#host über workshop_host und sponsor läuft, und wie PR #3066 seinen preload hinzugefügt hat. Füge preload(workshop_host: :sponsor) neben dem bestehenden Join hinzu und lass :workshop_host wie im Issue beschrieben aus eager_load heraus. Fertig, wenn die Anzahl der Abfragen für /dashboard nicht mehr mit der Anzahl der Workshops wächst.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

performance

DashboardQuery.upcoming_events_for_user runs one workshop_host lookup per workshop on every /dashboard render. Give it the same treatment as PR #3066: keep :sponsors in the join and add preload(workshop_host: :sponsor).

  • app/queries/dashboard_query.rb:27-40 eager_loads :sponsors but never loads :workshop_host
  • Workshop#host lazy-loads through workshop_host&.sponsor, so each card costs up to two extra queries — up to 2 × DashboardQuery::MAX_WORKSHOP_QUERY per render
  • The dashboard action renders the same EventCardComponent → WorkshopPresenter#venue → model.host path that PR #3066 fixed for the homepage
  • Do not add :workshop_host to the eager_load list: sharing the workshop_sponsors join alias is the #2975 host-loss trap

Raised from the review of PR #3066; the gap predates that PR.

Vorherrschende Sprache
Ruby
Sterne
106
Forks
208
Ø Merge
19 Std. 51 Min.
Gemergte PRs (30 T.)
57

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus codebar/planner

Alle Issues in codebar/planner

Ähnliche Issues

Weitere Issues zu Ruby

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.