Rails 6 с наследственным камнем: показать все дерево, от root до самой последней подкатегории - PullRequest
1 голос
/ 17 февраля 2020

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

В настоящее время у меня есть следующие настройки, и я получаю только до подкатегории:

Внутри контроллера: @categories = Category.where(ancestry: nil).order('name ASC')

Внутри вида:

<% @categories.in_groups_of(3) do |category| %>
  <div class="row">
    <% category.each do |item| %>
      <div class="col-md-4">
        <% if item.present? %>
          <ul>
            <li><%= (item.name) %>
              <%= link_to edit_category_path(item) do %><i class="fas fa-edit"></i><% end %>
              <%= link_to new_subcategory_path(ancestry: item) do %><i class="fas fa-plus-circle"></i><% end %>
              <%= link_to category_path(item), :method => :delete, data: { confirm: "Are you sure?" } do %><i class="far fa-trash-alt"></i><% end %>

              <% unless item.children.empty? %>
                <ul>
                  <% item.children.sort_by(&:name).each do |subcategory| %>
                    <li>
                      <%= subcategory.name %>
                      <%= link_to edit_category_path(subcategory) do %><i class="fas fa-edit"></i><% end %>
                      <%= link_to new_subcategory_path(ancestry: subcategory) do %><i class="fas fa-plus-circle"></i><% end %>
                      <%= link_to category_path(subcategory), :method => :delete, data: { confirm: "Are you sure?" } do %><i class="far fa-trash-alt"></i><% end %>
                    </li>
                  <% end %>
                </ul>
              <% end %>
            </li>
          </ul>
        <% end %>
      </div>
    <% end %>
  </div>
<% end %>

Тогда я нашел это решение , который показывает root до самой последней подкатегории. Но я не могу по-настоящему использовать это решение, поскольку у меня есть несколько link_to, которые я хочу показать внутри l oop (как вы можете видеть выше). Какие-нибудь идеи, как я могу сделать вышеупомянутое решение, показывают root до самой последней подкатегории?

@items_tree = Category.all.arrange

def nested_groups(groups)
  s = content_tag(:ul) do
    groups.map do |group, sub_groups|
      content_tag(:li, (group.name + nested_groups(sub_groups)).html_safe)
    end.join.html_safe
  end
end
...