Rails:Ancestry如何制作无限菜单下拉菜单

时间:2012-01-10 20:59:48

标签: ruby-on-rails-3

我是Ruby和Rails的新手,并试图使用Ancestry创建菜单

我的代码如下:

在application_helper.rb

module ApplicationHelper
    def get_menus
      @men = Menu
     return @men
    end
  end

在views / layouts / _header_menu.html.erb

<% @menu = get_menus %>
          <% @menu.roots.each do |menu| %>
             <li <%= "class='current-menu-item'" if request.fullpath == menu.pagelink  %> >
               <a href="<%= menu.pagelink %>"><span><%= menu.name%></span></a>
               <% unless menu.children.empty? %>
                 <ul>
                 <% menu.children.each do |menu_child| %>
                 <li <%= "class='current-menu-item'" if request.fullpath == menu_child.pagelink  %> >
               <a href="<%= menu_child.pagelink %>"><span><%= menu_child.name%></span></a>
                 <% end %>
                  </ul>
                   <% end %>
             </li>
          <% end %>

通过这种方式,我只获得root及其子菜单。

如何使用祖先获得第n个菜单?

由于

1 个答案:

答案 0 :(得分:0)

你想为此做一个递归函数,但不要担心,它们很容易。

在我看来,菜单中有/是项目的集合,每个项目都是链接或其他菜单。

在应用程序助手中,使用“render_menu(menu)”之类的方法。它返回一个字符串。看看你不熟悉的任何方法的文档。

def render_menu(menu)    
    s = '<ul>'
    menu.each do |item|
      if item.responds_to?(:each)
        s << render_menu(item)
      else
        s << "<li>#{item}</li>"
    end 
    s    
end

请注意,您也可以(并且应该)也这样干:

def get_menus # todo: delete?
  Menu     
end