diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb index eee198e7600a0e106dc3d8d53202be96ca65c1b6..95b6efb4020d9e67c844a4bcf209338c10f6de5c 100644 --- a/activerecord/lib/active_record/relation/predicate_builder.rb +++ b/activerecord/lib/active_record/relation/predicate_builder.rb @@ -29,10 +29,13 @@ def self.build_from_hash(engine, attributes, default_table) 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.compact).or(attribute.eq(nil)) + array_predicates << attribute.in(values).or(attribute.eq(nil)) end else array_predicates << attribute.in(values)