fix infinite recursion with foreign_key #47889
Merged
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.
Motivation / Background
This addresses an infinite recursion that occurs as a result of trying to infer foreign key from an association's
inverse_of
when two associations are inverses of one another.Detail
In 15369fd we introduced the ability to infer the foreign_key for a model using
inverse_of
.In some association configurations, such as when there is a
has_one
that is the inverse of anotherhas_one
association, this inference causes infinite recursion when calling#foreign_key
on the reflection.This PR addresses that by adding a param to
Reflection#foreign_key
to indicate whether to infer frominverse_of
, and in#derive_foreign_key
we explicitly disable this behavior when calling#foreign_key
on the inverse association.Additional information
There didn't appear to be an existing pair of
has_one
associations that were inverses of one another so I added some to existing models. A pair ofhas_one
s is admittedly a bit odd, but we did encounter such associations in testing.Checklist
Before submitting the PR make sure the following are checked:
[Fix #issue-number]