diff options
author | Sean Griffin <sean@seantheprogrammer.com> | 2017-09-26 13:22:12 -0600 |
---|---|---|
committer | Sean Griffin <sean@seantheprogrammer.com> | 2017-09-26 13:23:26 -0600 |
commit | 9cf7e3494f5bd34f1382c1ff4ea3d811a4972ae2 (patch) | |
tree | c1f1a45eb13de1840c29370ac761a8dd93aed63e | |
parent | 7352f8dbd25516f480433b03eb90dd4868b9d785 (diff) | |
download | rails-9cf7e3494f5bd34f1382c1ff4ea3d811a4972ae2.tar.gz rails-9cf7e3494f5bd34f1382c1ff4ea3d811a4972ae2.tar.bz2 rails-9cf7e3494f5bd34f1382c1ff4ea3d811a4972ae2.zip |
Treat `Set` as an `Array` in `Relation#where`
I do not want to set the expectation that any enumerable object should
behave this way, but this case in particular comes up frequently enough
that I'm caving on this one.
Fixes #30684.
-rw-r--r-- | activerecord/CHANGELOG.md | 5 | ||||
-rw-r--r-- | activerecord/lib/active_record/relation/predicate_builder.rb | 1 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 13 |
3 files changed, 19 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index c34236d4be..7cae105ddb 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,8 @@ +* Passing a `Set` to `Relation#where` now behaves the same as passing an + array. + + *Sean Griffin* + * Use given algorithm while removing index from database. Fixes #24190. diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb index 5c42414072..be4b169f67 100644 --- a/activerecord/lib/active_record/relation/predicate_builder.rb +++ b/activerecord/lib/active_record/relation/predicate_builder.rb @@ -13,6 +13,7 @@ module ActiveRecord register_handler(Range, RangeHandler.new(self)) register_handler(Relation, RelationHandler.new) register_handler(Array, ArrayHandler.new(self)) + register_handler(Set, ArrayHandler.new(self)) end def build_from_hash(attributes) diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index ae1dc35bff..6270533dc2 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -1912,6 +1912,19 @@ class RelationTest < ActiveRecord::TestCase end end + test "#where with set" do + david = authors(:david) + mary = authors(:mary) + + authors = Author.where(name: ["David", "Mary"].to_set) + assert_equal [david, mary], authors + end + + test "#where with empty set" do + authors = Author.where(name: Set.new) + assert_empty authors + end + private def custom_post_relation table_alias = Post.arel_table.alias("omg_posts") |