Передача пути к методу current_page - PullRequest
1 голос
/ 27 сентября 2011

У меня есть вспомогательный метод, помогающий определить, должен ли элемент меню навигации быть активным / неактивным.

  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 /: league /: year /: month /: day',: controller => 'events',: action => 'list'

Этот маршрут генерирует путь, такой как / pow или / chow / 2011/09/25.Лиги могут быть пау, чау или вау.

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Мне нравится ненавязчивый подход JS с добавлением / удалением классов и деактивированными ссылками unwrap (), но он требует определенных правил.

Способ Rails состоит в использовании link_to_unless_current встроенного помощника длявыделите и отмените связь на текущей странице href.

0 голосов
/ 27 сентября 2011

Вы ищете именованные маршруты . В своем файле rout.rb добавьте

:as => :foo

после маршрута. Тогда используйте

if current_page(events_path) || current_page(foo_path)

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

0 голосов
/ 27 сентября 2011

Вот что я делаю:

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.") %>

Конечно, вы можете абстрагировать его дальше, передавая заголовок ссылки и путь к помощнику, если хотите, но это немного хлопотно (для меня).

ОБНОВЛЕНИЕ:не берите в голову, смотрите ответ Михайлова - намного чище (зачем изобретать велосипед?):)

...