Распечатать структуру папок из запроса ActiveRecord - PullRequest
1 голос
/ 21 мая 2019

У меня есть одна модель с именем Папка.Модель имеет внешний ключ, который указывает на первичный ключ таблицы.Я использую эту структуру для создания дерева виртуальных папок.

Моя модель выглядит следующим образом:

class Folder
     has_many :folders
     belongs_to :folder, optional: true
end

После создания нескольких папок, связанных друг с другом, я, по сути, создаю дерево с N ветвями.Я не могу вспомнить, как это должно быть проанализировано, чтобы я мог распечатать HTML в моем представлении, который покажет фактическую структуру папок.

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

@folders = Folder.all.where(folder_id: nil)

На мой взгляд

<ul>
    <% @folders.each do |i| %>
        <li>
            <%= i.name %>
             Somehow I need to grab the other child folders here and continue this process N times.
        </li>
</ul>

1 Ответ

1 голос
/ 21 мая 2019

Вы можете сделать частичное, которое просматривает каждый элемент, и либо 1) отображает элемент как обычный элемент li (если элемент является файлом), либо 2) рекурсивно отображает себя (если элемент является каталогом).

например что-то вроде:

# index.html.erb (or whatever your endpoint is, if not index)
<%= render partial: "_entries.html.erb", locals: {entries: @folders} %>

# _entries.html.erb
<ul>
  <% entries.each do |item| %>
    <li>
      <% if item.is_directory? %>
        <!-- rerender this partial with files in current directory -->
        <%= render partial: "_entries.html.erb", locals: {entries: item.children} %>
      <% else %>
        <!-- render individual items -->
        <%= item.name %>
      <% end %>
    </li>
  <% end %>
</ul>

Ули должны быть вложены так же глубоко, как и должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...