def determine_sort_image(to_sort_by,currently_sorted_by,order)
if to_sort_by currently_sorted_by
if order ‘ASC’
image_tag(“arrow2_ascend.gif”,:border => “0”,:id => “img_tag”)
elsif order == ‘DESC’
image_tag(“arrow2_descend.gif”,:border => “0”,:id => “img_tag”)
end
else
image_tag(“arrow2_clear.gif”,:border => “0”,:id => “img_tag”)
end
end
# TEST TEST TEST
def test_image_flipper
asc_image = determine_sort_image(“market_date”,”market_date”,”ASC”)
assert(asc_image = /arrow2_ascend/)
desc_image = determine_sort_image(“market_date”,”market_date”,”DESC”)
assert(desc_image = /arrow2_descend/)
clear_image = determine_sort_image(“market_date”,”ric”,”ASC”)
assert(clear_image =~ /arrow2_clear/)
end
<th class="header_column_0">Legal Entity Id <%= link_to(determine_sort_image('legalEentityId',
session[:order_by_column],
session[:order_direction]),
:action => "show_links_sorted",:sort_by => "legalEentityId") %> </th>
<th class="header_column_1">Legal Entity Name<%= link_to(determine_sort_image('nameFull',
session[:order_by_column],
session[:order_direction]),
:action => "show_links_sorted",:sort_by => "nameFull") %> </th>
I have two tables Parent and Legal Entity where parent has_many: legal entities
so in the Parent model i create following function nothing fancy
def legal_entity_links_sorted(field,direction)
return LegalEntity.find(:all,
:conditions => "parentId = #{self.parentId}",
:order => "#{field} #{direction}",
:select => "legalEntityId , nameFull")
end
#Test obviously:
assert_nothing_raised{Parent.find(25).legal_entity_links_sorted("legalEntityId","ASC")}
assert_equal 531,Parent.find(25).legal_entity_links_sorted("legalEntityId","ASC")[0].legalEntityId
assert_equal 5291,Parent.find(25).legal_entity_links_sorted("legalEntityId","DESC")[0].legalEntityId
assert_equal "Aristeia Partners, L.P.",Parent.find(25).legal_entity_links_sorted("legalEntityId","DESC")[0].nameFull
# TEST FIRST
def test_show_ordered
get :show_ordered,:id => "UK",:sort_by => "sector"
assert_equal "UK",assigns(:selected_main_tab)
assert_equal "sector",@request.session[:order_by_column]
assert_equal "ASC",@request.session[:order_direction]
get :show_ordered,:id => "UK",:sort_by => "sector"
assert_equal "DESC",@request.session[:order_direction]
get :show_ordered,:id => "UK",:sort_by => "markter"
assert_equal "ASC",@request.session[:order_direction]
end
# CODE
def show_ordered
set_sort_related_sessions
@selected_main_tab = params[:id]
render :action => "show"
end
private
def set_sort_related_sessions
if session[:order_by_column]==params[:sort_by]
if session[:order_direction]=='DESC'
session[:order_direction] \= 'ASC'
else
session[:order_direction] \= 'DESC'
end
elsif !params[:sort_by].nil?
session[:order_by_column] \= params[:sort_by]
session[:order_direction] \= 'ASC'
else
session[:order_by_column] \= "lower(nameFull)" # set default sort column
session[:order_direction] \= "ASC"
end
end