2016-06-24 3 views
2

У меня есть следующие самозагрузки меню (таблетки), определенное в частичном:Установки текущей активной вкладки в загрузочном меню

<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> 

Вот некоторые примеры маршруты:

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

Я ссылочное это частичный в разных взглядах. Как динамически изменить текущую активную вкладку?

+0

Вы должны соответствовать текущему маршруту или маршруту. Если вы можете указать пример ваших определенных маршрутов, это может облегчить выбор пути. В идеале вы хотите совместить по программно определенному маршруту - соответствие по пути немного более хакерское. – Jonathan

+0

Убедитесь, что вы инициализировали вкладку Bootstrap с помощью JS. Демо - http://codepen.io/anon/pen/yJgbqE?editors=1010 –

+0

Этот драгоценный камень может помочь вам - https://github.com/comfy/active_link_to –

ответ

2

Вам нужно будет проверить текущий путь, и если он соответствует вашей ссылке, добавьте класс active в ваш li.

Простым способом было бы сравнить params[:controller] и params[:action].

Например:

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

Вот "грязный" пример. Это лучше, чтобы переместить его в какой-то помощник:

<ul class="nav nav-pills"> 

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

</ul> 
+0

Не уверен, что я Следую за тобой. Если возможно, не могли бы вы предоставить примерный код на основе маршрутов, которые у меня есть. В какой файл идет этот код? – user1175969

+0

@ user1175969 добавлен ... – Uzbekjon

+0

Awesome. Это работает! – user1175969

1

Альтернативой @ решение Uzbekjon является использование метода current_page? помощника. Первым аргументом является контроллер, второй (необязательный) - это действие.

Поскольку ваши ссылки на ссылки будут ссылками верхнего уровня, вам обычно не нужно указывать действие. Таким образом, у вас все еще будет активная таблетка для субстраниц в одном контроллере.

например:

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

Я думаю, что это немного более элегантно.

+0

Это хороший способ сделать это тоже. Благодаря! – user1175969

+0

Добро пожаловать :). Извините, я не мог опубликовать достаточно быстро – Jonathan

+0

Это решение работает только на индексной странице контроллера. Как заставить его работать на всех страницах в пределах области управления? – Wes

Смежные вопросы