2012-01-10 10 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 

はthusly DRYまた、あなたがすることができます(とすべきである):

def get_menus # todo: delete? 
    Menu  
end 
関連する問題