Rails: родословная, как сделать бесконечные выпадающие меню - PullRequest
0 голосов
/ 11 января 2012

Я новичок в Ruby и Rails и пытаюсь создать меню с помощью Ancestry

Мой код указан ниже:

In 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 голосов
/ 11 января 2012

Вы могли бы сделать рекурсивную функцию для этого, но не волнуйтесь, они просты.

На мой взгляд, меню имеет / представляет собой набор элементов, каждый из которых представляет собой ссылку или другое меню.

В вашем приложении помощник, такой метод, как "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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...