aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorAkira Matsuda <ronnie@dio.jp>2011-12-28 14:27:38 +0900
committerAkira Matsuda <ronnie@dio.jp>2011-12-28 15:32:56 +0900
commit1877cf9b2a3e21bb77f33b28f9c42cc1071872a0 (patch)
tree567ddd5a3689dd71615374eaf4c4e997594882cd /activerecord
parentc8711e4ecd1531db15b6f2d0dbf01fed44904667 (diff)
downloadrails-1877cf9b2a3e21bb77f33b28f9c42cc1071872a0.tar.gz
rails-1877cf9b2a3e21bb77f33b28f9c42cc1071872a0.tar.bz2
rails-1877cf9b2a3e21bb77f33b28f9c42cc1071872a0.zip
where(foo: [1, nil]) becomes "WHERE foo = 1 OR foo IS NULL"
was "WHERE foo IN (1) OR foo IS NULL" before
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder.rb5
1 files changed, 4 insertions, 1 deletions
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