diff --git a/lib/ransack/search.rb b/lib/ransack/search.rb index 03115c5a..4d196a2b 100644 --- a/lib/ransack/search.rb +++ b/lib/ransack/search.rb @@ -26,7 +26,7 @@ def initialize(object, params = {}, options = {}) if params.is_a? Hash params = params.dup params = params.transform_values { |v| v.is_a?(String) && strip_whitespace ? v.strip : v } - params.delete_if { |k, v| [*v].all?{ |i| i.blank? && i != false } } + params.delete_if { |k, v| [*v].all?{ |i| i.blank? && i != false && !i.nil? } } else params = {} end diff --git a/spec/ransack/search_spec.rb b/spec/ransack/search_spec.rb index d7fd1c86..3709f7ce 100644 --- a/spec/ransack/search_spec.rb +++ b/spec/ransack/search_spec.rb @@ -75,6 +75,12 @@ module Ransack Search.new(Person, name_eq_any: ['foobar']) end + it 'keeps conditions with a nil value in an array before building' do + expect_any_instance_of(Search).to receive(:build) + .with({ 'name_in' => [nil] }) + Search.new(Person, name_in: [nil]) + end + it 'does not raise exception for string :params argument' do expect { Search.new(Person, '') }.not_to raise_error end