2012-01-10 80 views
0

我是新來的Ruby和Rails,並試圖利用祖先Rails的:祖先如何使無限的菜單下拉菜單

我的代碼,以使菜單爲下:

在application_helper.rb

module ApplicationHelper 
    def get_menus 
     @men = Menu 
    return @men 
    end 
    end 
的意見/佈局/ _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 %> 

這樣我得到只有袋鼠t及其子菜單。

我怎樣才能獲得第n個使用祖先的菜單數量?

感謝

回答

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 

注意您可以(也應該)也正是如此DRY:

def get_menus # todo: delete? 
    Menu  
end