-
-
Notifications
You must be signed in to change notification settings - Fork 810
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow Active Record Ransack aliases with the same name on different models #717
Merged
jonatack
merged 2 commits into
activerecord-hackery:master
from
laserlemon:ransack-alias-name-collision
Aug 31, 2016
Merged
Allow Active Record Ransack aliases with the same name on different models #717
jonatack
merged 2 commits into
activerecord-hackery:master
from
laserlemon:ransack-alias-name-collision
Aug 31, 2016
Conversation
This file contains 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
This fixes two bugs: 1. Subclasses were not properly inheriting their parents' Ransack aliases in Mongoid because each class defined its very own set of aliases. 2. In Active Record, Ransack aliases were defined in such a way that the parent's (and grandparent's, etc.) aliases were overwritten by the child, meaning that all aliases were ultimately kept on ActiveRecord::Base. This has the unfortunate effect of enforcing uniqueness of Ransack alias names across all models rather than per model. Depending on the load order of models, earlier definitions of an alias in other models would be clobbered.
There's more background as to why this fix works in Rails' documentation of |
laserlemon
changed the title
Ransack alias name collision
Allow Active Record Ransack aliases with the same name on different models
Aug 26, 2016
@@ -23,7 +23,8 @@ def ransacker(name, opts = {}, &block) | |||
end | |||
|
|||
def ransack_alias(new_name, old_name) | |||
self._ransack_aliases.store(new_name.to_s, old_name.to_s) | |||
self._ransack_aliases = _ransack_aliases.merge new_name.to_s => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's worth noting that this is exactly how the ransacker
method already works.
💚 ❕ |
Thanks @laserlemon ❤️ 💚 💙 💛 💜 |
prasadsurase
pushed a commit
to prasadsurase/ransack
that referenced
this pull request
Sep 22, 2016
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.
This fixes two bugs:
aliases in Mongoid because each class defined its very own set of
aliases.
parent's (and grandparent's, etc.) aliases were overwritten by the
child, meaning that all aliases were ultimately kept on
ActiveRecord::Base. This has the unfortunate effect of enforcing
uniqueness of Ransack alias names across all models rather than per
model. Depending on the load order of models, earlier definitions of
an alias in other models would be clobbered.