У меня есть несколько статических страниц в меню навигации. Я хочу добавить такой класс, как «текущий», к элементу, который отображается в данный момент.
Я делаю это так, чтобы добавить кучу вспомогательных методов (каждый для одного элемента) для проверки контроллера и действия.
def current_root_class
'class="current"' if controller_name == "homepage" && action_name == "index"
end
<ul>
<li <%= current_root_class %>><%= link_to "Home", root_path %>
Есть ли лучший способ сделать это !? Мой нынешний путь такой глупый ...
navigation
ruby-on-rails-3
Питер Вонг
источник
источник
controller_name
иaction_name
вместо paramsЯ сделал помощника по имени
nav_link
:используется как:
который будет создавать HTML как
источник
Используйте
current_page?
помощник, чтобы определить, следует ли вам назначать"current"
класс. Например:Обратите внимание , вы также можете пройти путь (не только хэш опций), например:
current_page?(root_path)
.источник
Я использую эту функцию nav_link (текст, ссылка) в application_helper.rb (Rails 3), чтобы выполнить свою работу, и она скатывает за меня ссылки на панель навигации bootstrap twitter 2.0.
Пример:
источник
current_page?
метод, как и в других ответах.Я сделал это так, чтобы добавить вспомогательную функцию в application_helper
Затем в навигаторе
Это проверяет путь ссылки на текущий uri страницы и возвращает либо ваш текущий класс, либо пустую строку.
Я не тестировал это тщательно, и я очень новичок в RoR (перешел через десятилетие с PHP), поэтому, если в этом есть серьезный недостаток, я хотел бы его услышать.
По крайней мере, таким образом вам понадобится только 1 вспомогательная функция и простой вызов в каждой ссылке.
источник
Чтобы построить ответ @Skilldrick ...
Если вы добавите этот код в application.js, он обеспечит, чтобы любые раскрывающиеся меню с активными дочерними элементами также были отмечены как активные ...
Чтобы повторить вспомогательный код> Добавьте помощника под названием nav_link:
используется как:
который будет создавать HTML как
источник
Я думаю, что лучший способ - это
application_helper.rb:
И в меню:
источник
<%= content_tag(:li, "Click me", class: is_active('controller', 'action')) %>
, он не будет печатать атрибут класса для nil. apidock.com/rails/ActionView/Helpers/TagHelper/content_tagЯ знаю, что это устаревший ответ, но вы можете легко игнорировать все эти проверки текущей страницы, используя вспомогательную оболочку link_to , называемую active_link_to gem, она работает именно так, как вы хотите, добавьте активный класс в ссылку на текущую страницу
источник
Вот полный пример того, как добавить активный класс на страницу меню начальной загрузки в представлении rails.
источник
Я использую потрясающий гем под названием Tabs on Rails .
источник
У меня есть более сжатая версия nav_link, которая работает точно так же, как link_to, но настроена для вывода оборачивающего тега li.
Поместите следующее в свой application_helper.rb
Если вы посмотрите на приведенный выше код и сравните его с кодом link_to в url_helper.rb, единственное отличие состоит в том, что он проверяет, является ли URL-адрес текущей страницей, и добавляет класс «active» в оборачивающий тег li. Это потому, что я использую помощник nav_link с компонентом nav Twitter Bootstrap, который предпочитает, чтобы ссылки были заключены в теги li, а «активный» класс применялся к внешнему li.
Хорошая вещь в приведенном выше коде заключается в том, что он позволяет вам передавать блок в функцию, как вы можете сделать с link_to.
Например, список навигации начальной загрузки со значками будет выглядеть так:
Тонкий:
Вывод:
Кроме того, как и в случае с помощником link_to, вы можете передать параметры HTML в nav_link, который будет применен к тегу a.
Пример передачи заголовка для якоря:
Тонкий:
Вывод:
источник
Лично я использовал здесь комбинацию ответов
Я использую материализацию css, и мой способ сделать основные категории сворачиваемыми - это использовать код ниже
надеюсь, это поможет кому-то
источник
Этот
current_page?
метод для меня недостаточно гибкий (скажем, вы устанавливаете контроллер, но не действие, тогда он вернет true только для действия индекса контроллера), поэтому я сделал это на основе других ответов:Пример:
источник
Ага! Ознакомьтесь с этой статьей: Лучший способ добавить «выбранный» класс к ссылкам в Rails
Перетащите nav_link_helper.rb в app / helpers, и это может быть очень просто:
Помощник nav_link работает так же, как стандартный помощник Rails link_to, но добавляет «выбранный» класс к вашей ссылке (или ее оболочке), если соблюдены определенные критерии. По умолчанию, если целевой URL-адрес ссылки совпадает с URL-адресом текущей страницы, к ссылке добавляется класс по умолчанию «selected».
Здесь есть суть: https://gist.github.com/3279194
ОБНОВЛЕНИЕ: теперь это жемчужина: http://rubygems.org/gems/nav_link_to
источник
Я использую такой простой помощник для ссылок верхнего уровня, чтобы
/stories/my-story
страница выделяла/stories
ссылкуисточник
Позвольте мне показать свое решение:
_header.html.erb :
application_helper.rb :
application_controller.rb :
источник
Согласно ответу Skilldrick , я изменю его на следующее:
чтобы сделать его более полезным.
источник
Эта версия основана на версии @ Skilldrick, но позволяет добавлять html-контент.
Таким образом, вы можете:
nav_link "A Page", a_page_path
но также:
или любой другой HTML-контент (например, вы можете добавить значок).
Вот помощник:
источник
Думаю, я придумал простое решение, которое может оказаться полезным во многих случаях использования. Это позволяет мне:
link_to
(например, добавление значка внутри ссылки)application_helper.rb
active
к полному имени класса элемента ссылки вместо того, чтобы быть единственным классом.Итак, добавьте это в
application_helper.rb
:А в вашем шаблоне может быть что-то вроде этого:
В качестве бонуса вы можете указать или нет
class_name
и использовать его так:<div class="<%= current_page?(root_path) %>">
Благодаря предыдущим ответам 1 , 2 и ресурсам .
источник
все это работает с простыми панелями навигации, но как насчет раскрывающегося подменю? когда выбрано подменю, верхний пункт меню должен быть сделан «текущим», в этом случае tabs_on_rails я буду решением
источник
Вот как я решил в своем текущем проекте.
Затем..
источник
Мой легкий путь -
application.html.erb
,main_controller.erb
,Спасибо.
источник
Если вы также хотите поддерживать хэш опций html в представлении. Например, если вы хотите вызвать его с другим классом CSS или идентификатором, вы можете определить вспомогательную функцию следующим образом.
Итак, в представлении вызовите этот помощник так же, как вы вызываете помощник link_to
источник
Создайте метод,
ApplicationHelper
как показано ниже.Теперь используйте его, как показано ниже.
1. Для всех действий любого конкретного контроллера
2. Для всех действий многих контроллеров (через запятую)
3. Для конкретных действий любого конкретного контроллера
4. Для определенных действий многих контроллеров (через запятую)
5. Для каких-то специфических действий любого конкретного контроллера
6. Для некоторых специфических действий многих контроллеров (через запятую)
Надеюсь, поможет
источник