以下是用html.erb完成的迭代树,它只能到达树结构中的两个级别:
<ul>
<li><%= root_template.id %></li>
<ul>
<% for template in root_template.children %>
<li><%= template.id %></li>
<% if template.has_children? %>
<ul>
<% for template_child in template.children %>
<li><%= template_child.id %></li>
<% end %>
</ul>
<% end %>
<% end %>
</ul>
</ul>
结果:
我希望将代码移动到辅助文件中,并应用递归来达到所有级别:
html.erb(因此,从模板设置根):
<% html = '' %>
<ul>
<li><%= root_template.id %></li>
<ul>
<%= recursive_tree root_template, html %>
</ul>
</ul>
然后是辅助方法:
def recursive_tree(root, html)
html << ''
if !root.has_children?
html << "<li>#{root.id}</li>"
return html.html_safe
else
for template_child in root.children
html << "<ul>#{recursive_tree(template_child, html)}</ul>"
end
end
return html.html_safe
end
结果:
我已经花费了一天的时间来确定如何从辅助程序向模板发送适当的html,现在即使我使用调试器也找不出这个递归的问题和解决方案。有什么建议吗?