Передача пути к методу current_page
У меня есть вспомогательный метод, помогающий определить, должен ли элемент меню навигации быть активным / неактивным.
def events_nav_link
nav_item = 'Events'
if current_page?(events_path) # additional conditions here
# do nothing
else
nav_item = link_to nav_item, events_path
end
content_tag(:li, nav_item + vertical_divider, :class => 'first')
end
Я хочу, чтобы эта ссылка была неактивной не только для страницы events_path, но и для других страниц. Проблема в том, что я не знаю, какой параметр передать метод current_page?(Путь) на основе этого маршрута:
map.list_events '/ events /: лига /: год /: месяц /: день',:controller => 'events',:action => 'list'
Этот маршрут генерирует путь, такой как / pow или /chow/2011/09/25. Лиги могут быть пау, чау или вау.
3 ответа
Мне нравится ненавязчивый подход JS с добавлением / удалением классов и деактивированными ссылками unwrap(), но он требует определенных правил.
Способ Rails заключается в использовании встроенного помощника link_to_unless_current для выделения и отмены связи на текущей странице href.
Вот что я делаю:
application_helper.rb:
def already_here?(this_controller,this_action)
controller_name == this_controller && action_name == this_action ? true : false
end
в представлении:
<%= already_here?("users","index") ? "Manage Users" : link_to("Manage Users", users_path, :title => "Manage Users.") %>
Конечно, вы можете абстрагировать его дальше, передавая заголовок ссылки и путь к помощнику, если хотите, но это немного хлопотно (для меня).
ОБНОВЛЕНИЕ: неважно, смотрите ответ Михайлова - намного чище (зачем изобретать велосипед?):)
Вы ищете названные маршруты. В вашем файле rout.rb добавьте
:as => :foo
после маршрута. Тогда используйте
if current_page(events_path) || current_page(foo_path)
в твоем состоянии.