fix: remove broken organisers eager load on Workshop queries#2683
Merged
Conversation
The organisers association has a scope condition on the join table that Rails' preloader applies without joining the permissions table, causing PG::UndefinedTable on production data. This was already fixed for Event and Meeting in PR #2679, but PR #2682 reintroduced it on Workshop in the new load_events method.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
PR #2682 introduced a
load_eventsmethod that eagerly loads:organiserson Workshop:The
organisersassociation has a scope condition on the join table:When Rails preloads this with the separate-query strategy (which it does here because
.where(id: [...])is a simple query), it generates:This references
permissions.namewithout joiningpermissions, causingPG::UndefinedTable: missing FROM-clause entry for table "permissions".Context
PR #2679 already fixed this exact same bug for Event and Meeting by removing
:organisersfrom their eager loads. PR #2682 reintroduced it on Workshop in the newload_eventsmethod, under the old assumption that Workshop's complex associations still forced Rails to useeager_load(LEFT JOINs). The.where(id: [...])pattern inload_eventstriggers preloading instead, so the broken SQL resurfaces.Fix
Remove
:organisersfrom the Workshopincludesinload_events.Verification
/events/pastloads successfully (was returning 500 before)