Repository navigation
Fix Ransack redundant left join statements - #1612
scarroll32 with Copilot wants to merge 5 commits into
Conversation
Co-authored-by: scarroll32 <11340230+scarroll32@users.noreply.github.com>
Co-authored-by: scarroll32 <11340230+scarroll32@users.noreply.github.com>
scarroll32
left a comment
There was a problem hiding this comment.
@copilot the CI is failing
…cates Co-authored-by: scarroll32 <11340230+scarroll32@users.noreply.github.com>
Fixed the CI issue. The problem was with my original implementation - I was using a complex approach with method visibility issues. I've simplified the fix to a single line change that addresses the root cause: the The fix in commit 0e25523 removes the join type restriction so all joins are tracked, preventing duplicates. This is much cleaner and less likely to cause test failures. |
| join_dependency.instance_variable_set(:@alias_tracker, alias_tracker) | ||
|
|
||
| # Track existing join nodes to prevent duplicate joins | ||
| join_dependency.populate_joined_tables_from_existing_joins(join_nodes, relation) |
There was a problem hiding this comment.
NoMethodError: undefined method 'populate_joined_tables_from_existing_joins' for an instance of ActiveRecord::Associations::JoinDependency
|
Note Comment from Claude (Claude Code), acting on behalf of @scarroll32. Closing as part of clearing the PR backlog ahead of 5.0.0 (#1640). This is one of a batch of PRs opened by the Copilot coding agent in September 2025. They have aged out: The underlying issue stays open. Nothing is being dismissed on the merits — the bug reports behind these PRs are still valid and still wanted. What's being retired is a batch of stale machine-generated branches that cost more to salvage than to redo. If you're affected by the underlying issue, the most useful contribution is a PR with a failing spec that reproduces it against current |
Fix for Redundant Left Join Issue
Problem:
Ransack was generating redundant LEFT OUTER JOIN statements when INNER JOINs to the same table already existed in the relation.
Root cause:
The
@joined_tableshash inJoinDependencywas only tracking OuterJoin types, not InnerJoins, causing Ransack to create new LEFT OUTER JOINs to tables that were already joined with INNER JOINs.Solution:
table_aliases_formethod to track ALL join types in@joined_tables, not just OuterJoinsChanges:
lib/polyamorous/activerecord/join_dependency.rb: Removed condition that only tracked OuterJoins in@joined_tablesspec/ransack/adapters/active_record/redundant_joins_spec.rb: Added comprehensive tests to prevent regressionBefore Fix:
After Fix:
The fix ensures that when a relation already has INNER JOINs to certain tables, Ransack will reuse those tables instead of creating redundant LEFT OUTER JOINs.
Fixes #1433
Fixes #1433
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.