Ruby on rails 通过分部函数实现递归是最佳实践吗?
我需要在HTML中显示嵌套的集合结构。我是用以下方法来做的:Ruby on rails 通过分部函数实现递归是最佳实践吗?,ruby-on-rails,recursion,Ruby On Rails,Recursion,我需要在HTML中显示嵌套的集合结构。我是用以下方法来做的: <ul<%= ' id="tree"' if depth == 0 %>> <% items.each do |item| %> <li id="node_<%= item.id %>"><a><%= item.name %></a> <% if item.has_children? %> <%= rend
<ul<%= ' id="tree"' if depth == 0 %>>
<% items.each do |item| %>
<li id="node_<%= item.id %>"><a><%= item.name %></a>
<% if item.has_children? %>
<%= render :partial => 'tree_level', :locals => {:items => item.children, :depth => depth + 1} %>
<% end %>
</li>
<% end %>
</ul>
{:items=>item.children,:depth=>depth+1}%>
这是最好的地方有代码吗?我“觉得”在对象上应该有一个
to_html
方法,它可以为我转储整个树结构,尽管这是可行的。我不确定这是否是最佳实践,但我使用了类似的代码来呈现项目树
更快的替代方法是创建执行相同任务的helper方法(递归遍历树并将部分字符串添加到结果字符串中)。它有一点PHP风格:(但对于如此少量的HTML,我想可以:)
助手看起来像:
def render_node(node)
res = "<ul>"
...
node.items.each {|n| res << render_node(n)}
...
res << "</ul>"
res
end
def render_节点(节点)
res=“”
...
node.items.each{| n | res好吧,您应该意识到使用分部有(小)开销,所以如果性能是一个问题,您可能不想这么多地使用它们。否则,我认为使用分部没有什么问题
但是,您可能希望使用partials的collection变量(请参阅“呈现partials集合”),它可以稍微清理代码
<%=render_node ProjectTree.new%>