aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/CHANGELOG.md6
-rw-r--r--activerecord/lib/active_record/relation/query_methods.rb2
-rw-r--r--activerecord/test/cases/relation/where_test.rb6
3 files changed, 14 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 41f6ab5342..9e44131fa9 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,3 +1,9 @@
+* `where` raises ArgumentError on unsupported types.
+
+ Fixes #20473.
+
+ *Jake Worth*
+
* Add an immutable string type to help reduce memory usage for apps which do
not need mutation detection on Strings.
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index 55fd0e0b52..0dcecbd42d 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -552,6 +552,8 @@ module ActiveRecord
WhereChain.new(spawn)
elsif opts.blank?
self
+ elsif !opts.is_a?(String) && !opts.respond_to?(:to_h)
+ raise ArgumentError, "Unsupported argument type: #{opts} (#{opts.class})"
else
spawn.where!(opts, *rest)
end
diff --git a/activerecord/test/cases/relation/where_test.rb b/activerecord/test/cases/relation/where_test.rb
index c3a1471205..399a4dbbf1 100644
--- a/activerecord/test/cases/relation/where_test.rb
+++ b/activerecord/test/cases/relation/where_test.rb
@@ -302,5 +302,11 @@ module ActiveRecord
assert_raises(ActiveModel::ForbiddenAttributesError) { Author.where(params) }
assert_equal author, Author.where(params.permit!).first
end
+
+ def test_where_with_unsupported_arguments
+ author = authors(:david)
+
+ assert_raises(ArgumentError) { Author.where(42) }
+ end
end
end