Лучший способ создать простое меню в приложении rails - PullRequest
3 голосов
/ 11 марта 2012

У меня есть простое меню, которое выглядит так:

<ul class="menu">
     <li class="active"><a href="<%= root_path %>">Home</a></li>
     <li class=""><%= link_to 'Feeds' , feeds_path %></li>
     <li class=""><%= link_to 'Accounts' , accounts_path %></li>
</ul>

Класс "активный" - это стиль для отметки моей текущей страницы.

У меня есть два вопроса:
1. Как мне «сообщить» приложению, на какой странице я нахожусь, и попросить его «изменить» класс на активный?
2. Есть ли лучший способ создать это меню (может быть, управляется контроллером или таблицей БД)?

Я понимаю, что это вопрос новичка, но я думал об этом уже несколько дней, прочитал несколько учебных пособий, но ни один из них действительно не щелкнул.

Спасибо за вашу помощь.

Ответы [ 4 ]

1 голос
/ 11 марта 2012

Я сделал это недавно в ApplicationHelper:

  def nav_links
    items = [home_link, about_me_link, contact_link]
    content_tag :ul, :class => "nav" do
      items.collect { |item| concat item}
    end
  end

  def home_link
    nav_item_active_if(!@article || @article.type.nil?) do
     link_to "Home", root_path
    end
  end

  def about_me_link
    nav_item_active_if(@article && @article.type == "About") do
      link_to "About Me", article_path(About.first)
    end
  end

  def contact_link
    nav_item_active_if(@article && @article.type == "Contact") do
      link_to "Contact", article_path(Contact.first)
    end
  end

  def nav_item_active_if(condition, attributes = {}, &block)
    if condition
      attributes["class"] = "active"
    end
    content_tag(:li, attributes, &block)
  end

На ваш взгляд, вы можете просто позвонить:

      <%= nav_links %>

Вы можете использовать это в качестве примера.

0 голосов
/ 12 марта 2012

Я использовал кучу 'если и текущей страницы? метод. Это некрасиво, но это сработало, если у кого-то есть лучшая идея, как это сделать, я буду рад узнать об этом.

if current_page? (root_path)
   content_tag(:li , link_to('Home' , root_path), :class => "active")
 else
   content_tag(:li , link_to('Home' , root_path))
end
0 голосов
/ 11 марта 2012

Не идеальное решение, но вы можете сделать следующее:

создать 3 переменные:

@homeActive = ""
@feedsActive = ""
@accountsActive = ""

В предоставленном вами коде установите класс для каждой переменной, соответствующей имени.

<li class=@homeActive><a href="<%= root_path %>">Home</a></li>

Теперь в вашем контроллере под домашним методом, скажем, установите @homeActive = "active", а два других в "".Повторите эти действия для других методов, и это должно сработать.

0 голосов
/ 11 марта 2012

Я использую метод current_page?, чтобы установить свою активную ссылку.Он принимает путь в качестве параметра.Я создаю хэш текстов ссылок и путей и перебираю их, печатая ссылки.Таким образом, мне нужно только вызвать current_page?один раз.

Однако есть драгоценные камни, которые могут вам помочь.Просмотрите их: https://www.ruby -toolbox.com / Categories / rails_menu_builders

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