0

我有嵌套的文件夹对象,例如文件系统上的目录结构。用户可能拥有:

  • 文件夹 1
  • 文件夹 2

    • 文件夹 2a
    • 文件夹 2b
      • 文件夹 2ba
      • 文件夹 2bb
  • 文件夹 3

依此类推,只要用户想要。我正在尝试在视图中显示如上所示的文件夹结构。

我可以each在第一级做,对于那个级别的每个文件夹,手动做each它的孩子,然后each做它的孩子等等。但这似乎效率低下。我不希望有预先设定的水平限制。这似乎应该是自动化的,但我不太确定如何做到这一点。此外,似乎递归不是一种选择,因为视图中没有方法。

这对帮手有用吗?我应该放弃并仅在单击父文件夹时使用javascript加载子文件夹吗?

4

2 回答 2

2

因此,假设您有一个Folder带有subfolders方法的类,您将希望有一个递归部分,例如_folder.html.erb

<li><%= folder.name %></li>
<% unless folder.subfolders.empty? -%>
  <li>
    <ul>
      <%= render partial: "folder", collection: folder.subfolders %>
    </ul>
  </li>
<% end -%>

然后在你的 s 上设置一些填充,ul你应该很高兴。

对部分的初始调用可能看起来像这样,其中@folders包含您的顶级文件夹,并且将位于folders.html.erb或类似的位置:

<ul>
  <%= render partial: "folder", collection: @folders %>
</ul>
于 2013-08-28T23:54:56.143 回答
0

也许是这样的:

class Folder < ActiveRecord::Base

  def self.add_in_children(folder)

    folder.children.each do |child|

      @all_folders << [level,child]
      @level+=1
      if child.children
        add_in_children(child)
      end
    end
  end 

  def self.all_records
    @all_folders=[]
    @level=0
    @folders=add_in_children('/')
  end

end

Folder.all_records;
于 2013-08-29T00:26:39.660 回答