Module: MetaSearch::Helpers::UrlHelper
- Defined in:
- lib/meta_search/helpers/url_helper.rb
Instance Method Summary collapse
-
#sort_link(builder, attribute, *args) ⇒ Object
Generates a column sort link for a given attribute of a MetaSearch::Builder object.
Instance Method Details
#sort_link(builder, attribute, *args) ⇒ Object
Generates a column sort link for a given attribute of a MetaSearch::Builder object. The link maintains existing options for the sort as parameters in the URL, and sets a meta_sort parameter as well. If the first parameter after the attribute name is not a hash, it will be used as a string for alternate link text. If a hash is supplied, it will be passed to link_to as an html_options hash. The link will be assigned two css classes: sort_link and one of “asc” or “desc”, depending on the current sort order. Any class supplied in the options hash will be appended.
Sample usage:
<%= sort_link @search, :name %>
<%= sort_link @search, :name, 'Company Name' %>
<%= sort_link @search, :name, :class => 'name_sort' %>
<%= sort_link @search, :name, 'Company Name', :class => 'company_name_sort' %>
<%= sort_link @search, :name, :default_order => :desc %>
<%= sort_link @search, :name, 'Company Name', :default_order => :desc %>
<%= sort_link @search, :name, :class => 'name_sort', :default_order => :desc %>
<%= sort_link @search, :name, 'Company Name', :class => 'company_name_sort', :default_order => :desc %>
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/meta_search/helpers/url_helper.rb', line 24 def sort_link(builder, attribute, *args) raise ArgumentError, "Need a MetaSearch::Builder search object as first param!" unless builder.is_a?(MetaSearch::Builder) attr_name = attribute.to_s name = (args.size > 0 && !args.first.is_a?(Hash)) ? args.shift.to_s : builder.base.human_attribute_name(attr_name) prev_attr, prev_order = builder.search_attributes['meta_sort'].to_s.split('.') = args.first.is_a?(Hash) ? args.shift : {} current_order = prev_attr == attr_name ? prev_order : nil if [:default_order] == :desc new_order = current_order == 'desc' ? 'asc' : 'desc' else new_order = current_order == 'asc' ? 'desc' : 'asc' end .delete(:default_order) = args.first.is_a?(Hash) ? args.shift : {} css = ['sort_link', current_order].compact.join(' ') [:class] = [css, [:class]].compact.join(' ') .merge!( builder.search_key => builder.search_attributes.merge( 'meta_sort' => [attr_name, new_order].join('.') ) ) link_to [ERB::Util.h(name), order_indicator_for(current_order)].compact.join(' ').html_safe, url_for(), end |