以下は、html.erb で行われる反復ツリーで、ツリー構造の 2 レベルのみに達します。
<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を送信する方法を理解するためにすでに1日を費やしましたが、デバッガーを使用しても、この再帰の問題と解決策を理解できませんでした。何か意見はありますか?