ブートストラップ ナビゲーション バーで。クラスを追加することで、ボタンがクリックされた効果を得ることができますactive
。当然、これを自分のページで使用したいと思います。たとえば、私たちについてのページにいる場合、私たちについてのボタンをクリックしてもらいたいと思います。
これについて最善の方法は何ですか?各ページに移動し、下部で jQuery 関数を使用してクラスactive
を追加します。より良い方法はありますか?
ブートストラップ ナビゲーション バーで。クラスを追加することで、ボタンがクリックされた効果を得ることができますactive
。当然、これを自分のページで使用したいと思います。たとえば、私たちについてのページにいる場合、私たちについてのボタンをクリックしてもらいたいと思います。
これについて最善の方法は何ですか?各ページに移動し、下部で jQuery 関数を使用してクラスactive
を追加します。より良い方法はありますか?
ここについて読むcurrent_page?
current_page?
メソッドの例を使用して、ハンドル ロジックのメソッドを追加できます。
module ApplicationHelper
def active_class(link_path)
current_page?(link_path) ? "active" : ""
end
end
ブートストラップ navbarテンプレートの例
<div class="navbar">
<div class="navbar-inner">
<a class="brand" href="#">Title</a>
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul>
</div>
</div>
したがって、ビューでは次のようになります
HTML
<li class="<%= active_class(some_path) %>">
<%= link_to "text of link", some_path %>
</li>
ハムル
%li{:class => active_class(some_path)}
= link_to "text of link", some_path
またはrequest.fullpath
、現在のパスにパラメーターがある場合は、現在の完全なパスを取得するために使用できます
例
<ul>
<% Contry.all.each do |c| %>
<li class="snavitem <%= active_class(contry_path(c)) %>">
<%= link_to "show #{c.name}", contry_path(c) %>
</li>
<% end %>
</ul>
そしてあなたのapplication_helper.rb
def active_class(link_path)
request.fullpath == link_path ? "active" : ""
end
ここでrequest.fullpathについて読んでください
私の意見では、それを実現するためのよりクリーンなlink_to_in_li
方法は、application_helper.rb にメソッドを記述することです。
def link_to_in_li(body, url, html_options = {})
active = "active" if current_page?(url)
content_tag :li, class: active do
link_to body, url, html_options
end
end
次に、このように使用します
<%= link_to_in_li "Home", root_path, id: "home_link" %>
内部のコードがli
少し読みにくいと思います。
CRUDビューの場合、アクティブなクラスが配置されていないため、これらの他のものに基づいて作成した回答を投稿します。
module ApplicationHelper
def active_class(name)
controller_name.eql?(name) || current_page?(name) ? 'active' : ''
end
end
私のビューは次のようなものを使用します:
<ul class="nav navbar-nav">
<li class="nav-item <%= active_class('/') %>">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item <%= active_class('leads') %>">
<a class="nav-link" href="/leads">Leads</a>
</li>
</ul>
<ul class="nav navbar-nav pull-right <%= active_class(edit_user_registration_path) %>">
<li class="nav-item ">
<a class="nav-link" href="/users/edit">Perfil</a>
</li>
<li class="nav-item">
<%= link_to('Sair', destroy_user_session_path, method: :delete) %>
</li>
</ul>
各ページでこれを試して、コントローラーまたはアクションを確認し、cssを追加してください
例えば:
<li class= <%= (controller.controller_name.eql?('pages') && controller.action_name.eql?('index') )? 'active':''%> ><%= link_to 'my page', pages_path%></li>
でヘルパー メソッドを定義できます。application_helper.rb
def create_link(text, path)
class_name = current_page?(path) ? 'active' : ''
content_tag(:li, class: class_name) do
link_to text, path
end
end
次のように使用できます。
create_link 'xyz', any_path
次のようにレンダリングされます<li class="active"><a href="/any">xyz</a></li>
ブートストラップ ナビゲーションに最適です。
li
なぜ要素だけに制限するのですか?と一緒に複数のクラス名をサポートしないのはなぜactive
ですか? このソリューションにより、次のことが可能になります。
link_to
(例: リンク内にアイコンを追加)application_helper.rb
active
唯一のクラスではなく、link 要素のクラス名全体に追加します。したがって、これをに追加しapplication_helper.rb
ます:
def active_class?(class_name = nil, path)
class_name ||= ""
class_name += " active" if current_page?(path)
class_name.strip!
return class_name
end
テンプレートには、次のようなものがあります。
<div class="col-xs-3">
<%= link_to root_path, :class => active_class?("btn btn-outline-primary", root_path) do %>
<i class="fa fa-list-alt fa-fw"></i>
<% end %>
</div>
a を指定するかどうかを指定して、次のclass_name
ように使用することもできます。
<li class="<%= active_class?(root_path) %>">Home</li>