Conditional Logic on link_to with a block.

64 views
Skip to first unread message

John SB

unread,
Feb 21, 2012, 9:04:04 AM2/21/12
to Ruby on Rails: Talk
I've got some ugly code I don't know how to improve on. I've got a
link_to tag that takes a fair amount of html as a block. I need the
href value for the link to be different depending on some logic, there
are four possible values for the href.

What I ended us with was this, and it's pretty unreadable. Any
suggestions on how to do this better?

<%= link_to (@brand.nil? ? (@store.nil? ?
(from_catalog_path(params[:id].blank? ? Category.root.id :
params[:id], product.id, product.name_url)) :
(from_store_path(@store.id, product.id))) :
(from_brand_path(@brand.id, product.id))) do -%>
...... HTML IN HERE .....
<% end %>

Tim Shaffer

unread,
Feb 21, 2012, 9:51:59 AM2/21/12
to rubyonra...@googlegroups.com
Maybe just put the logic in the controller?

if @brand.nil?
  if @store.nil?
    @brand_link_path = from_catalog_path(params[:id].blank? ? Category.root.id : params[:id], product.id, product.name_url)
  else
    @brand_link_path = from_store_path(@store.id, product.id)
  end
else
  @brand_link_path = from_brand_path(@brand.id, product.id)
end

Then it simplifies your view:

<%= link_to(@brand_linnk_path) do -%> HTML HERE <% end %>
Reply all
Reply to author
Forward
0 new messages