1
0
Fork 0
mirror of https://github.com/activerecord-hackery/ransack.git synced 2022-11-09 13:47:45 -05:00

Add ability to use a named route when using sort_link

For example,

sort_link [:engine, Engine::Model.search]

Will use the engine's routing to determine where the route should go. The :engine symbol here should be the name of your engine, i.e. the engine_name setting which generally defaults to the downcased version of your engine's module.

Addresses problem discussed in #84.
This commit is contained in:
Ryan Bigg 2012-03-28 14:00:19 -05:00
parent adcd42a9e8
commit 25ba7e3a8f
2 changed files with 12 additions and 4 deletions

View file

@ -25,6 +25,12 @@ module Ransack
end
def sort_link(search, attribute, *args)
# Extract out a routing proxy for url_for scoping later
if search.is_a?(Array)
routing_proxy = search.shift
search = search.first
end
raise TypeError, "First argument must be a Ransack::Search!" unless Search === search
search_params = params[:q] || {}.with_indifferent_access
@ -53,9 +59,11 @@ module Ransack
options.merge!(
:q => search_params.merge(:s => "#{attr_name} #{new_dir}")
)
options.merge!(:use_route => routing_proxy) if routing_proxy
link_to [ERB::Util.h(name), order_indicator_for(current_dir)].compact.join(' ').html_safe,
url_for(options),
html_options
url_for(options),
html_options
end
private

View file

@ -26,7 +26,7 @@ module Ransack
end
describe '#sort_link' do
subject { @controller.view_context.sort_link(Person.search(:sorts => ['name desc']), :name, :controller => 'people') }
subject { @controller.view_context.sort_link([:main_app, Person.search(:sorts => ['name desc'])], :name, :controller => 'people') }
it { should match /people\?q%5Bs%5D=name\+asc/}
it { should match /sort_link desc/}
@ -35,4 +35,4 @@ module Ransack
end
end
end
end