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

Aberta Para iniciantes
#3,070 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@davidmillen50 já está trabalhando nisso.

Desde 2/11/2026.

  • #3074 de @davidmillen50 — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
82/100
Tipo de issue
Refatoração
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
rails, ruby
Domínio
backend, database

Direção de pesquisa

Comece em app/queries/dashboard_query.rb por volta das linhas 27-40, onde upcoming_events_for_user usa eager_load(:sponsors) sem carregar o host do workshop. Verifique como Workshop#host percorre workshop_host e sponsor, e como o PR #3066 adicionou seu preload. Adicione preload(workshop_host: :sponsor) ao lado do join existente e deixe :workshop_host fora do eager_load, como alerta a issue. Está concluído quando a contagem de consultas de /dashboard não cresce mais com o número de workshops.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
Ruby
Estrelas
106
Forks
208
Merge médio
19h 51min
PRs com merge (30d)
57

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de codebar/planner

Todas as issues de codebar/planner

Issues semelhantes

Mais issues de Ruby

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.