Ruby on rails 通过分部函数实现递归是最佳实践吗?

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

我需要在HTML中显示嵌套的集合结构。我是用以下方法来做的:

<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%>