Передача пути к методу 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)

в твоем состоянии.

Другие вопросы по тегам