Saya memiliki versi nav_link yang lebih ringkas yang bekerja persis seperti link_to, tetapi disesuaikan untuk mengeluarkan tag li pembungkus.
Letakkan baris berikut di application_helper.rb Anda
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
Jika Anda melihat kode di atas dan membandingkannya dengan kode link_to di url_helper.rb, satu-satunya perbedaan adalah ia memeriksa apakah url adalah halaman saat ini, dan menambahkan kelas "aktif" ke tag li pembungkus. Ini karena saya menggunakan pembantu nav_link dengan komponen nav Twitter Bootstrap yang lebih memilih tautan untuk dibungkus di dalam tag li dan kelas "aktif" diterapkan ke li luar.
Hal yang menyenangkan tentang kode di atas adalah memungkinkan Anda memasukkan blok ke dalam fungsi, seperti yang dapat Anda lakukan dengan link_to.
Misalnya, daftar navigasi bootstrap dengan ikon akan terlihat seperti ini:
Ramping:
ul.nav.nav-list
=nav_link root_path do
i.icon-home
| Home
=nav_link "#" do
i.icon-user
| Users
Keluaran:
<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>
Selain itu, seperti helper link_to, Anda dapat memasukkan opsi HTML ke nav_link, yang akan diterapkan ke tag.
Contoh penyampaian judul untuk jangkar:
Ramping:
ul.nav.nav-list
=nav_link root_path, title:"Home" do
i.icon-home
| Home
=nav_link "#", title:"Users" do
i.icon-user
| Users
Keluaran:
<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>