diff --git a/lib/ransack/helpers/form_helper.rb b/lib/ransack/helpers/form_helper.rb index a934794a2..be0d0a2be 100644 --- a/lib/ransack/helpers/form_helper.rb +++ b/lib/ransack/helpers/form_helper.rb @@ -79,7 +79,7 @@ def url(routing_proxy, options_for_url) class SortLink def initialize(search, attribute, args, params) @search = search - @params = params + @params = parameters_hash(params) @field = attribute.to_s @sort_fields = extract_sort_fields_and_mutate_args!(args).compact @current_dir = existing_sort_direction @@ -113,6 +113,11 @@ def html_options(args) private + def parameters_hash(params) + return params unless params.instance_variable_defined?(:@parameters) + params.instance_variable_get(:@parameters) + end + def extract_sort_fields_and_mutate_args!(args) return args.shift if args[0].is_a?(Array) [@field] @@ -133,7 +138,7 @@ def search_and_sort_params end def search_params - @params[@search.context.search_key].presence || {} + parameters_hash(@params[@search.context.search_key]).presence || {} end def sort_params diff --git a/lib/ransack/search.rb b/lib/ransack/search.rb index 97bfb2ff1..5495d024c 100644 --- a/lib/ransack/search.rb +++ b/lib/ransack/search.rb @@ -15,6 +15,9 @@ class Search :translate, :to => :base def initialize(object, params = {}, options = {}) + if params.instance_variable_defined?(:@parameters) + params = params.instance_variable_get :@parameters + end if params.is_a? Hash params = params.dup params.delete_if { |k, v| [*v].all?{ |i| i.blank? && i != false } }