From 1877cf9b2a3e21bb77f33b28f9c42cc1071872a0 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Wed, 28 Dec 2011 14:27:38 +0900 Subject: where(foo: [1, nil]) becomes "WHERE foo = 1 OR foo IS NULL" was "WHERE foo IN (1) OR foo IS NULL" before --- activerecord/lib/active_record/relation/predicate_builder.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb index a436f3269e..95b6efb402 100644 --- a/activerecord/lib/active_record/relation/predicate_builder.rb +++ b/activerecord/lib/active_record/relation/predicate_builder.rb @@ -29,8 +29,11 @@ module ActiveRecord if values.include?(nil) values = values.compact - if values.empty? + case values.length + when 0 array_predicates << attribute.eq(nil) + when 1 + array_predicates << attribute.eq(values.first).or(attribute.eq(nil)) else array_predicates << attribute.in(values).or(attribute.eq(nil)) end -- cgit v1.2.3