link_to_unless_current(name, options = {}, html_options = {}, &block) public

Creates a link tag of the given name using a URL created by the set of options unless the current request URI is the same as the links, in which case only the name is returned (or the given block is yielded, if one exists). You can give link_to_unless_current a block which will specialize the default behavior (e.g., show a “Start Here” link rather than the link’s text).


Let’s say you have a navigation menu…

<ul id="navbar">
  <li><%= link_to_unless_current("Home", { action: "index" }) %></li>
  <li><%= link_to_unless_current("About Us", { action: "about" }) %></li>

If in the “about” action, it will render…

<ul id="navbar">
  <li><a href="/controller/index">Home</a></li>
  <li>About Us</li>

…but if in the “index” action, it will render:

<ul id="navbar">
  <li><a href="/controller/about">About Us</a></li>

The implicit block given to link_to_unless_current is evaluated if the current action is the action given. So, if we had a comments page and wanted to render a “Go Back” link instead of a link to the comments page, we could do something like this…

    link_to_unless_current("Comment", { controller: "comments", action: "new" }) do
       link_to("Go back", { controller: "posts", action: "index" })
Show source
Register or log in to add new notes.
November 26, 2009
0 thanks

How to use with HAML

Are you using HAML and try to do the block-thing (do…)? Please note that the whole block has to be in a single line. More:

July 1, 2011 - (<= v3.0.9)
0 thanks

Another way to use


link_to_unless_current("Profile", profile_path) 

%> also works (instead of pointing to controller/action)