More-efficient way to pass the Rails params hash to named route
Refactored the helper function:
def options(hash)
o={:employer=>params[:employer],:location=>params[:location],:posted=>params[:posted],:starting=>params[:starting],:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]}
# add the contents of hash, overwriting entries with duplicate keys
o.merge!(hash)
end
Refactored the view code to pass hash instead of key/value pair; greater flexibility:
<%= link_to_unless params[:employer]==employer, employer, jobs_path( options({:employer=>employer}) ) %>
and
<%= link_to_unless_current '✗', jobs_path( options({:employer=>nil}) ) %>
![craig](https://i.stack.imgur.com/PgGXL.png?s=256&g=1)
craig
Certified, Epic-Clarity consultant. Open-source projects: PsCrystal - PowerShell wrapper of the Crystal Reports SDK PsEnterprise - PowerShell wrapper of BusinessObjects Enterprise SDK AppleScript email merge - Email merge using Outlook or Mail/Address Book source-highlight-crystal - GNU source-highlight language for Crystal Reports' formula language crystal-reports-tmbundle - A TextMate bundle for the Crystal Report's forumula language
Updated on June 05, 2022Comments
-
craig about 2 years
I need a more-efficient way to pass the params hash to a named route, including the ability to add/remove/modify a key/value pair.
Adding a key (the :company symbol), while preserving the remainder of the params hash (manually specify each symbol/value):
# adds the company filter link_to_unless params[:company]==company, company, jobs_path(:company=>company, :posted=>params[:posted],:sort=>params[:sort],:dir=>params[:dir])
Removing a key (eliminates the :company symbol), while preserving the remainder of the params hash (manually specify each symbol/value):
# create a link that removes the company filter link_to_unless_current 'x', jobs_path(:posted=>params[:posted],:sort=>params[:sort],:dir=>params[:dir])
I thought of just passing the params hash directly, but that throws an exception:
link_to_unless params[:company]==company, company, jobs_path( params )
I'm hoping for some DRYer alternatives.