MONGOID-5785 allow named scopes to remove a default scope #5832
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.
As currently implemented, named scopes are merged with the default scope (see here). This means you cannot declare a named scope that unsets any part of the default scope; if you try, the default scope will simply be merged back into it.
Merging the default scope is not necessary, because any scope you pass in will already be based on the default scope:
Here,
Person.germans
will always use the default scope, even without it being merged in, because callingwhere
will initialize a newCriteria
object using that default scope. Merging the default scope is redundant.However, because this has been this way for a very long time (basically since the feature was first introduced prior to 2014), we risk breaking code that inadvertently depends on this behavior. Thus, I've opted to put the fix behind a flag, which we can flip when we eventually release Mongoid 10.