Conditionally assigning html id to link_to (tabbed interface)

Hi all, I am looking to implement a tabbed interface. The tabs are mere link_to links in the template. All i need to do is, check if a particular tab has been selected and if it has been selected, set the :id attribute to 'current'. The css code will take care of the rest. I know the css works because when i explicitly set the :id => 'current without any conditions, it shows in the browser. I have however tried many variations and all are throwing me syntax errors. Hope someone can give me the right syntax for this or at least show a better way of implementing this.

<%= link_to 'Companies', companies_path(), :id=>"current" unless controller.controller_name != 'Companies' %> <%= link_to 'Companies', companies_path(), if controller.controller_name == 'Companies' :id=>"current" end%> <%= link_to 'Companies', companies_path(), if controller.controller_name != 'Companies' :id=>"current" %> <%= link_to 'Companies', companies_path(), if current_page? (:controller=> 'Companies') :id=>"current" end%>

I have seen the rails widget s plugin for tabbed interface and it just seems as too much code for something so simple.

Vinay wrote:

Hi all, I am looking to implement a tabbed interface. The tabs are mere link_to links in the template. All i need to do is, check if a particular tab has been selected and if it has been selected, set the :id attribute to 'current'. The css code will take care of the rest. I know the css works because when i explicitly set the :id => 'current without any conditions, it shows in the browser. I have however tried many variations and all are throwing me syntax errors. Hope someone can give me the right syntax for this or at least show a better way of implementing this.

<%= link_to 'Companies', companies_path(), :id=>"current" unless controller.controller_name != 'Companies' %> <%= link_to 'Companies', companies_path(), if controller.controller_name == 'Companies' :id=>"current" end%> <%= link_to 'Companies', companies_path(), if controller.controller_name != 'Companies' :id=>"current" %> <%= link_to 'Companies', companies_path(), if current_page? (:controller=> 'Companies') :id=>"current" end%>

I have seen the rails widget s plugin for tabbed interface and it just seems as too much code for something so simple.

Creating your own tab link helper ought to ease things up:

def tab_link_to(name, options = {}, html_options = {})   html_options.merge!({ :id => 'current' }) if current_page?(options)   link_to name, options, html_options end

Which you could then use in your view:

<% tab_link_to 'Companies', companies_path %>

@Erol, Thank you so much! I have been letting this bug me for a couple of days now and to see your simple solution working is an amazing pick-me- up! :slight_smile: I think its the simplest tabbed interface code one could hope for.

You might also want to look at link_to_unless_current (and perhaps its
source code) to see how you might change your helper (or abandon it
altogether in some cases).

-Rob

Thank you Rob. I actually DID come across these helpers when i was searching around for solutions. These though provide the link conditionally. If the condition is not satisfied, the link itself does not exist, it only renders text. But i need all the links to exist. And only the CSS id to change conditionally. For which the code above worked like a charm. Thanks again for your input!

check this out: http://wiki.rubyonrails.org/rails/pages/Tabnav