Skip to content

Instantly share code, notes, and snippets.

@mokolabs
Created April 19, 2010 17:29
Show Gist options
  • Save mokolabs/371324 to your computer and use it in GitHub Desktop.
Save mokolabs/371324 to your computer and use it in GitHub Desktop.
%p
= link_to header_link_for(:name)
\|
= link_to header_link_for(:location)
\|
= link_to header_link_for(:screens)
def header_link_for(column)
column_name = column.to_s
query_string = {}
# Toggle order
new_order = if params[:sort] == column_name
params[:order].blank? ? :asc : {:asc => :desc, :desc => :asc}[params[:order].to_sym]
elsif params[:q].blank? and params[:sort].blank? and column_name == 'name'
:desc
else
:asc
end
# Toggle order indicator
indicator = case params[:order]
when 'desc' then '↓'
else '↑'
end
# Build query string
unless params[:q].blank?
query_string = query_string.merge({:q => params[:q]})
end
unless params[:q].blank? and column_name == 'name' and params[:order] == 'desc'
query_string = query_string.merge({:sort => column_name, :order => new_order.to_s})
end
query_string = query_string.collect {|k,v| "#{k}=#{v}"}.join('&')
# Generate complete path
unless query_string.blank?
path = [request.path, query_string].join('?')
else
path = request.path
end
# Add order indicator to active header link
if params[:sort] == column_name or (params[:q].blank? and params[:sort].blank? and column_name == 'name')
column_name = indicator + " " + column_name
end
# Build link
link_to column_name, path
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment