2016-06-24 18 views
2

Ich habe folgende Bootstrap-Menü (Tabletten) in einem Teil definiert:die aktuelle aktive Registerkarte in einem Bootstrap-Menü einstellen

<ul class="nav nav-pills"> 
    <li class="active"><a href="#">Home</a></li> 
    <li><a href="#">Menu 1</a></li> 
    <li><a href="#">Menu 2</a></li> 
</ul> 

Hier sind einige Beispiele für Routen:

get 'institute/:institute_id/students' => 'students#index' , as: 'students_of_institute' 
    get 'students/:student_id'    => 'students#show' 

ich diese verwiesen haben teilweise in verschiedenen Ansichten. Wie ändere ich den aktuell aktiven Tab dynamisch?

+0

Sie müssen auf den aktuellen Pfad oder die Route abstimmen. Wenn Sie ein Beispiel für Ihre definierten Routen angeben können, kann es einfacher sein zu entscheiden, welchen Weg Sie gehen möchten. Idealerweise würden Sie auf einer programmgesteuerten Route abgleichen wollen - das Anpassen auf einem Pfad ist ein bisschen hackiger – Jonathan

+0

Stellen Sie sicher, dass Sie die Registerkarte Bootstrap mit JS initialisieren. Demo - http://codepen.io/anon/pen/yJgbqE?editors=1010 –

+0

Dieses Juwel könnte Ihnen helfen - https://github.com/comfy/active_link_to –

Antwort

2

Sie müssten den aktuellen Pfad überprüfen und, wenn er mit Ihrem Link übereinstimmt, fügen Sie eine active Klasse zu Ihrem li hinzu. Ein einfacher Weg wäre params[:controller] und params[:action] zu vergleichen.

Zum Beispiel:

# GET /posts 
params[:controller]  => "posts" 
params[:action]   => "index" 

Hier ist ein "schmutziges" Beispiel. Es ist besser, es zu einem gewissen Helfer ausrücken:

<ul class="nav nav-pills"> 

    <li class="<%= 'active' if params[:controller] == 'students' && params[:action] == 'index' %>"><%= link_to 'Students', students_path %></li> 

</ul> 
+0

Nicht sicher, ob ich dir gefolgt. Wenn möglich, könnten Sie bitte einen Beispielcode basierend auf den Routen zur Verfügung stellen, die ich habe. In welche Datei geht dieser Code? – user1175969

+0

@ user1175969 hinzugefügt ... – Uzbekjon

+0

Ehrfürchtig. Das funktioniert! – user1175969

1

Eine Alternative zu @ Uzbekjon-Lösung ist die current_page? Hilfsmethode zu verwenden. Das erste Argument ist der Controller, das zweite (optional) ist die Aktion.

Da Ihre Navigationslinks Links auf oberster Ebene sind, müssen Sie die Aktion normalerweise nicht angeben. Auf diese Weise haben Sie immer noch eine aktive Pille für Unterseiten im selben Controller.

Z. B:

<ul class="nav nav-pills"> 
    <li class="<%= 'active' if current_page? controller: :students %>"> 
    <%= link_to 'Students', students_path %> 
    </li> 
</ul> 

Ich denke, das etwas eleganter ist.

+0

Das ist auch eine schöne Art, es zu tun. Vielen Dank! – user1175969

+0

Willkommen :). Sorry, ich konnte nicht schnell genug posten – Jonathan

+0

Diese Lösung scheint nur auf der Indexseite des Controllers zu funktionieren. Wie funktioniert es auf allen Seiten innerhalb des Controllers? – Wes

Verwandte Themen