如何动态构建树结构

时间:2012-07-31 05:30:59

标签: ruby-on-rails

在我看来,我得到所有页面

我得到了所有的页面以及所有的孩子和子孩子。如何获得如下所示的树结构:

<% for page in @pages%>
<li id="<%= page.id%>_page">    
    <div class="link">    
        #my attributes for the div<
      /div>    
#here I got the all siblings of that page. But here the structure is of just two      
#levels. I need upto n-levels.    
<% @childs = page.*descendants* %>    
<% if !@childs.nil? && !@childs.empty? %>
    <% for child in @childs%>     
    <ol class="child">
        <li id="<%= child.id%>_page">
            <div class="link">
                #my attributes for the div
            </div>
            </li>
    </ol>
    <%end%>
    <%end%>
</li>
<%end%>

我正在使用嵌套集,并希望以这种方式结构:

page1
     page 2
     page 3
           page 3.1
                   page 3.2
                           page3.4
                                   ...so on to last child
page 4
page 5
....so on to N-levels...

2 个答案:

答案 0 :(得分:0)

您正在尝试在视图中创建递归,这不仅复杂,而且会使您的视图代码混乱不堪。 一种干净的方法是定义一个递归生成输出的辅助函数。

我没有任何具体的例子,但您可以在this similar question

的答案中查看其中一个

答案 1 :(得分:0)

尝试后,我得到了      解决方案...我渲染部分,然后渲染自己......比如_show_children.html.erb     ..

    <% for page in @pages%>
    <li id="<%= page.id%>_page">    
        <div class="link">    
            #my attributes for the div<
          /div>    
    #here I got the all siblings of that page. But here the structure is of just two      
    #levels. I need upto n-levels.    
    <% @childs = page.descendants %>    
    <% if !@childs.nil? && !@childs.empty? %>
        <% for child in @childs%>     
         <%= render :partial => "show_children", :locals  => {:children => child`enter code here`.children  }%>
        <%end%>
        <%end%>
    </li>
<%end%>


.this partial will inturn render itself`