DRY methodology


#1

because I am a grasshopper…

Now that I can sort my ‘list’…is there a logical way of not repeating
myself to having essentially the same list view with multiple sorts?

i.e.

def list_cl

ordered by clients last name

@placement_pages, @placements = paginate(
  :placements,
  :include => [:client],
  :order_by => 'clients.last_name',
  :per_page => 14)

end

def list_fac

ordered by facility

@placement_pages, @placements = paginate(
  :placements,
  :include => [:facility],
  :order_by => 'facilities.name',
  :per_page => 14)

end

etc.

and then have links at the top of each column header to sort…

<%= link_to ‘Client’, :action => ‘list_cl’ %>
<%= link_to ‘Facility’, :action => ‘list_fac’ %>

Do I just have one ‘def list’ and then use something like a ‘case’
statement? If so, how do I tell it from the link_to which value?

Craig


#2

Pass an extra parameter after the action.

<%= link_to ‘Client’, :action => ‘list’, :sort_by => ‘client’ %>

Estelle.


#3

OK then :sort_by becomes sort of an instance variable then? It doesn’t
really create the ‘order_by’ on its own right?

Craig


#4

It becomes available via param[:sort_by]


– Tom M.


#5

Ok - I’m tugging at it…

<%= link_to ‘Placements’, :controller => ‘placements’, :action
=> ‘list’, :case_manager_id => case_manager %>

calls placements_controller.rb

this works…
def list
@placement_pages, @placements = paginate(
:placements,
:conditions => [“placements.case_manager_id = ?”, ‘15’],
:include => [:client],
:order_by => ‘clients.last_name’,
:per_page => 14)
end
or
:conditions => "placements.case_manager_id = “15”,
but
:conditions => "placements.case_manager_id =
params[:case_manager_id],

gives me the syntax error near : # the :conditions line… (whether I
use param or params - I don’t understand the difference between the two
terms).

and I can see from <% debug params %>
!map:HashWithIndifferentAccess
action: list
case_manager_id: “15”
controller: placements
{“action”=>“list”, “case_manager_id”=>“15”, “controller”=>“placements”}

that case_manager_id with value of 15 is coming through when I simply
comment out the conditions line altogether.

I’ve been playing with this but it’s the same form as the ‘:sort_by’
function so when I get one, I get both.


#6

Try this:

:conditions => [“placements.case_manager_id = ?”,
params[:case_manager_id] ],


#7

looks like this is going to have to wait until morning…I can’t seem to
stay connected to remote terminal now…somewhat spotty old dish
technology at clients until they move… ;-(

I will certainly try it…you have been spot on.

Thanks

Craig


#8

*** bing ***

You are truly remarkable.