Rails простая навигация, вложенный набор - PullRequest
0 голосов
/ 31 марта 2011

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

код navigation.rb:

  navigation.items do |primary|
    Category.roots.map do |root|
      primary.item ":root_#{root.id}", root.title, category_path(root) do |secondary|
        root.descendants.map do |desc|
          secondary.item ":desc_#{desc.id}", desc.title, category_path(desc)
        end
      end
    end
  end

Вопрос: как я могу отобразить всеуровни категорий в моем меню.Этот код делает только с вложением двух уровней.

Заранее благодарен

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Пожалуйста, посмотрите, как это делает refinery-cms.

_menu.html.erb близко к тому, что у вас есть. В дополнение к этому у него есть еще одна часть с именем _menu_branch.html.erb, которая рекурсивно отображает подменю меню.

https://github.com/resolve/refinerycms/blob/master/core/app/views/refinery/_menu.html.erb https://github.com/resolve/refinerycms/blob/master/core/app/views/refinery/_menu_branch.html.erb

Код вырезан из github:

_menu.html.erb

<nav id='<%= dom_id %>' class='<%= css %>'>
  <ul>
    <%= render :partial => '/refinery/menu_branch', :collection => roots,
               :locals => {
                 :hide_children => hide_children,
                 :sibling_count => (roots.length - 1),
                 :apply_css => true #if you don't care about class='first' class='last' or class='selected' set apply_css to false for speed.
               } -%>
  </ul>
</nav>

_menu_branch.html.erb

<li<%= ['', css].compact.join(' ').gsub(/\ *$/, '').html_safe %>>
<%= link_to(menu_branch.title, main_app.url_for(menu_branch.url)) -%>
  <% if (children = menu_branch.children unless hide_children).present? -%>
    <ul class='clearfix'>
      <%= render :partial => '/refinery/menu_branch', :collection => children,
                 :locals => {
                   :apply_css => local_assigns[:apply_css],
                   :hide_children => !!hide_children
                 } -%>
    </ul>
  <% end -%>
</li>
0 голосов
/ 29 июня 2011

Вам придется использовать рекурсив, если это вообще поможет, вы можете увидеть пример здесь: Рекурсивные Rails Вложенные ресурсы

...