Rail3 - Умный способ отобразить меню и добавить класс активного стиля? - PullRequest
2 голосов
/ 27 сентября 2010

Имеется приложение Rails 3 с меню, например:

<ul>
 <li>Home</li>
 <li>Books</li>
 <li>Pages</li>
</ul>

Что такое умный способ в Rails, чтобы приложение узнало хлебную крошку ,, или когда заставить один из LI отображаться как:

 <li class="active">Books</li>

thx

Ответы [ 2 ]

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

Я не уверен, если я предоставлю вам умный способ, но лучше что-то, чем ничего ...

Если в вашем меню есть ссылки - это не в вашем примере, но я полагаю, что в реальном меню должны быть ссылки, а не только пункты. Например, что-то вроде этого в HAML: (я использую HAML, так как написание ERB в текстовой области - просто ад)

%ul
  %li= link_to "Home", :controller => "home"
  %li= link_to "Books", :controller => "books"
  %li= link_to "Pages", :controller => "pages"

Тогда этот помощник (вставленный из моего проекта) пригодится:

#
# Shows link with style "current" in case when the target controller is same as 
# current
# beware: this helper has some limitation - it only accepts hash as URL parameter
#
def menu_link_to(title, url, html_options = {})
  unless url.is_a?(Hash) and url[:controller]
    raise "URL parameter has to be Hash and :controller has to be specified"
  end

  if url[:controller] == controller.controller_path
    html_options[:class] = "current"
  end

  link_to(title, url, html_options)
end

С помощью этого помощника вы можете заменить "link_to" в приведенном выше коде на "menu_link_to" и все!

1 голос
/ 30 мая 2011

Модифицированная версия помощника Радека Павенского немного проще и больше похожа на link_to.

  # Shows link with style "current" in case when the target controller is same as 
  # current.
  def menu_link_to(title, options = {}, html_options = {})
    if current_page?(options)
      html_options[:class] ||= []
      html_options[:class] << "active" # @TODO catch cases where the class is passed as string instead of array.
    end

    link_to(title, options, html_options)
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...