我在文件系统上嵌套了文件夹对象,如目录结构。用户可以:
文件夹2
文件夹3
依此类推,就像用户想要的那样。我试图在视图中显示文件夹结构,如上所示。
我可以在第一级执行each
,对于该级别中的每个文件夹,对其子项执行each
,然后对其子项each
进行操作,依此类推。但这似乎效率低下。我不希望有一个预先设定的水平限制。这似乎应该是自动化的,但我不太确定如何这样做。此外,似乎递归不是一种选择,因为视图中没有方法。
这对帮手有用吗?我应该放弃并仅在单击父文件夹时加载子文件夹,使用javascript?
答案 0 :(得分: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 -%>
然后在ul
上设置一些填充,你就应该好了。
对partial的初始调用可能看起来像这样@folders
包含您的顶级文件夹,并且会生活在folders.html.erb
或类似文件中:
<ul>
<%= render partial: "folder", collection: @folders %>
</ul>
答案 1 :(得分: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;