Eu tenho uma versão mais sucinta de nav_link que funciona exatamente como link_to, mas é personalizado para gerar uma tag li envolvente.
Coloque o seguinte em seu application_helper.rb
def nav_link(*args, &block)
if block_given?
options = args.first || {}
html_options = args.second
nav_link(capture(&block), options, html_options)
else
name = args[0]
options = args[1] || {}
html_options = args[2]
html_options = convert_options_to_data_attributes(options, html_options)
url = url_for(options)
class_name = current_page?(url) ? 'active' : nil
href = html_options['href']
tag_options = tag_options(html_options)
href_attr = "href=\"#{ERB::Util.html_escape(url)}\"" unless href
"<li class=\"#{class_name}\"><a #{href_attr}#{tag_options}>#{ERB::Util.html_escape(name || url)}</a></li>".html_safe
end
end
Se você olhar o código acima e compará-lo com o código link_to em url_helper.rb, a única diferença é que ele verifica se o url é a página atual e adiciona a classe "ativa" a uma tag li envolvente. Isso ocorre porque estou usando o auxiliar nav_link com o componente nav do Twitter Bootstrap, que prefere que os links sejam agrupados dentro de tags li e a classe "ativa" aplicada ao li externo.
O bom do código acima é que ele permite que você passe um bloco para a função, assim como você pode fazer com link_to.
Por exemplo, uma lista de navegação bootstrap com ícones se pareceria com:
Fino:
ul.nav.nav-list
=nav_link root_path do
i.icon-home
| Home
=nav_link "#" do
i.icon-user
| Users
Resultado:
<ul class="nav nav-list">
<li class="active">
<a href="/">
<i class="icon-home"/>
Home
</a>
</li>
<li>
<a href="#">
<i class="icon-users"/>
Users
</a>
</li>
</ul>
Além disso, assim como o helper link_to, você pode passar opções de HTML para nav_link, que será aplicado a uma tag.
Um exemplo de passagem de um título para a âncora:
Fino:
ul.nav.nav-list
=nav_link root_path, title:"Home" do
i.icon-home
| Home
=nav_link "#", title:"Users" do
i.icon-user
| Users
Resultado:
<ul class="nav nav-list">
<li class="active">
<a href="/" title="Home">
<i class="icon-home"/>
Home
</a>
</li>
<li>
<a href="#" title="Users">
<i class="icon-users"/>
Users
</a>
</li>
</ul>