在rails应用程序中创建简单菜单的最佳方法

时间:2012-03-10 20:32:49

标签: ruby-on-rails ruby ruby-on-rails-3.1 menu

我有一个简单的菜单,如下所示:

<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 个答案:

答案 0 :(得分:1)

我最近在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 %>

你可以用它作为例子。

答案 1 :(得分:0)

我使用current_page?方法设置我的活动链接。它以路径为参数。我创建了一个链接文本和路径的哈希,并迭代它打印链接。这样我只需要调用current_page?一次。

但是有些宝石可以帮到你。看看这些:https://www.ruby-toolbox.com/categories/rails_menu_builders

答案 2 :(得分:0)

不是一个完美的解决方案,但你可以做到以下几点。

创建3个变量:

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

在您提供的代码中,将类设置为与名称对应的每个变量。

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

现在,在home方法下的控制器中,设置@homeActive = "active",将其他两个设置为“”。重复其他方法,这应该有效。

答案 3 :(得分:0)

我使用了一堆'if's和current_page?方法。 这很难看,但是如果有人更好地了解如何做到这一点,我会很乐意了解它。

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