Я использую камень предков для создания категорий, подкатегорий, подкатегорий и так далее. Все работает просто отлично, я могу создать категорию, затем создать подкатегорию, которая принадлежит этой категории, а затем создать подкатегорию для подкатегории и так далее. Единственная проблема, с которой я сталкиваюсь, это то, что я не могу понять, как показать все категории с каждым полным деревом от 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