Ich habe eine prägnantere Version von nav_link, die genau wie link_to funktioniert, aber angepasst ist, um ein umhüllendes li-Tag auszugeben.
Fügen Sie Folgendes in Ihre application_helper.rb ein
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
Wenn Sie sich den obigen Code ansehen und ihn mit dem link_to-Code in url_helper.rb vergleichen, besteht der einzige Unterschied darin, dass überprüft wird, ob die URL die aktuelle Seite ist, und die Klasse "active" zu einem umhüllenden li-Tag hinzugefügt wird. Dies liegt daran, dass ich den nav_link-Helfer mit der nav-Komponente von Twitter Bootstrap verwende, die bevorzugt, dass Links in li-Tags eingeschlossen werden und die "aktive" Klasse auf das äußere li angewendet wird.
Das Schöne am obigen Code ist, dass Sie einen Block in die Funktion übergeben können, genau wie Sie es mit link_to tun können.
Eine Bootstrap-Navigationsliste mit Symbolen würde beispielsweise folgendermaßen aussehen:
Schlank:
ul.nav.nav-list
=nav_link root_path do
i.icon-home
| Home
=nav_link "#" do
i.icon-user
| Users
Ausgabe:
<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>
Darüber hinaus können Sie genau wie der link_to-Helfer HTML-Optionen an nav_link übergeben, die auf das a-Tag angewendet werden.
Ein Beispiel für die Übergabe eines Titels für den Anker:
Schlank:
ul.nav.nav-list
=nav_link root_path, title:"Home" do
i.icon-home
| Home
=nav_link "#", title:"Users" do
i.icon-user
| Users
Ausgabe:
<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>