aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorYuki Nishijima <mail@yukinishijima.net>2015-04-13 20:08:35 -0700
committerYuki Nishijima <mail@yukinishijima.net>2015-04-13 20:13:37 -0700
commit50cae600bd6f4a8d1b437368c82f65bc118f8417 (patch)
treee53d564c567a1caffc805621b254f92f3dd5446d /activerecord
parent8ac458ad2e252ba041d9f4e42b94bd5997a622be (diff)
downloadrails-50cae600bd6f4a8d1b437368c82f65bc118f8417.tar.gz
rails-50cae600bd6f4a8d1b437368c82f65bc118f8417.tar.bz2
rails-50cae600bd6f4a8d1b437368c82f65bc118f8417.zip
Add support for Set to Relation#where
Previously `#where` used to treat `Set`objects as nil, but now it treats them as an array: set = Set.new([1, 2]) Author.where(:id => set) # => SELECT "authors".* FROM "authors" WHERE "authors"."id" IN (1, 2)
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG.md4
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder.rb1
-rw-r--r--activerecord/test/cases/relations_test.rb11
3 files changed, 16 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 904ac5c26a..2b26918655 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,3 +1,7 @@
+* Add support for Set to `#where`.
+
+ *Yuki Nishijima*
+
* Fixed a bug where uniqueness validations would error on out of range values,
even if an validation should have prevented it from hitting the database.
diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb
index 43e9afe853..15b850c7f2 100644
--- a/activerecord/lib/active_record/relation/predicate_builder.rb
+++ b/activerecord/lib/active_record/relation/predicate_builder.rb
@@ -20,6 +20,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))
register_handler(AssociationQueryValue, AssociationQueryHandler.new(self))
end
diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb
index 0cf44388fa..c3409a1ca8 100644
--- a/activerecord/test/cases/relations_test.rb
+++ b/activerecord/test/cases/relations_test.rb
@@ -848,6 +848,17 @@ class RelationTest < ActiveRecord::TestCase
}
end
+ def test_find_all_using_where_with_a_set
+ david = authors(:david)
+ mary = authors(:mary)
+ set = Set.new([david.id, mary.id])
+
+ assert_queries(1) {
+ relation = Author.where(:id => set)
+ assert_equal [david, mary], relation
+ }
+ end
+
def test_exists
davids = Author.where(:name => 'David')
assert davids.exists?