Tam olarak link_to gibi çalışan, ancak bir sarmalama li etiketi çıkarmak için özelleştirilmiş daha kısa bir nav_link sürümüne sahibim.
Aşağıdakileri application_helper.rb dosyanıza koyun
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
Yukarıdaki koda bakarsanız ve onu url_helper.rb'deki link_to koduyla karşılaştırırsanız, tek fark, url'nin geçerli sayfa olup olmadığını kontrol etmesi ve "aktif" sınıfını bir sarma li etiketine eklemesidir. Bunun nedeni, bağlantıların li etiketleri içine sarılmasını ve dış li'ye uygulanan "active" sınıfını tercih eden Twitter Bootstrap nav bileşeni ile nav_link yardımcısını kullanıyorum .
Yukarıdaki kodun güzel yanı, tıpkı link_to ile yapabileceğiniz gibi, fonksiyona bir blok girmenize izin vermesidir.
Örneğin, simgeler içeren bir önyükleme gezinme listesi şöyle görünür:
İnce:
ul.nav.nav-list
=nav_link root_path do
i.icon-home
| Home
=nav_link "#" do
i.icon-user
| Users
Çıktı:
<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>
Ek olarak, tıpkı link_to yardımcısı gibi, HTML seçeneklerini nav_link'e aktarabilirsiniz, bu da bir etikete uygulanacaktır.
Çapa için bir başlık geçirme örneği:
İnce:
ul.nav.nav-list
=nav_link root_path, title:"Home" do
i.icon-home
| Home
=nav_link "#", title:"Users" do
i.icon-user
| Users
Çıktı:
<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>