在rails上的ruby中使用递归循环构造HTML

时间:2014-07-02 12:09:23

标签: html ruby-on-rails ruby recursion partial

大家好,我有一系列哈希:

@buttons = [{:serno=>1, :parent_serno=>0, :name=>"Home"},
{:serno=>2, :parent_serno=>0, :name=>"Search"},
{:serno=>3, :parent_serno=>0, :name=>"Search Payment"},
{:serno=>4, :parent_serno=>1, :name=>"Problematic Search Payment"},
{:serno=>5, :parent_serno=>1, :name=>"Cash Error"},
{:serno=>6, :parent_serno=>2, :name=>"Payment Note"},
{:serno=>7, :parent_serno=>2, :name=>"Search Payment By Category"},
{:serno=>8, :parent_serno=>3, :name=>"Search Payment New"},
{:serno=>9, :parent_serno=>3, :name=>"User Mangement"}]

我想为每个数组哈希(例如哈希x)创建div,它是“parent_serno == 0”,在div中写出它们的名字并在其中创建另一个div,对于每个数组哈希都是“parent_serno == hash” x [:serno]“。

我试图创建部分:

<% for m in @buttons %>
    <% unless @parent.present? %>
        <% if m[:parent_serno] == 0 %>
            <div>
                <%= m[:name] %>
                <% @parent = m[:serno] %>
                <% if @buttons.find{ |b| b[:parent_serno] == @parent }.present? %>
                    <% @buttons.find{ |b| b[:parent_serno] == @parent }.each do %>
                        <%= render partial: "navbar", object: @parent %>
                    <% end %>
                <% end %>
            </div>
        <% end%>
    <% else %>
        <% if m[:parent_serno] == @parent %>
            <div>
                <%= m[:name] %>
                <% @parent = m[:serno] %>
                <% if @buttons.find{ |b| b[:parent_serno] == @parent }.present? %>
                    <% @buttons.find{ |b| b[:parent_serno] == @parent }.each do %>
                        <%= render partial: "navbar", object: @parent %>
                    <% end %>
                <% end %>
            </div>
        <% end%>
    <% end %>
<% end %>

并在另一个html.erb文档中呈现它,但显然它不起作用:( 它只给出了数组中第一个哈希的名称,并且我想是递归停止。

1 个答案:

答案 0 :(得分:1)

我认为你需要的部分内容应该是这样的:

_button.html.erb

<div>
  <%= button[:name] %>
  <% render partial: 'button', 
      collection: @buttons.select { |b| b[:parent_serno] == button[:serno] } %>
</div>

index.html.erb

...
<% render partial: 'button', 
    collection: @buttons.select { |b| b[:parent_serno] == 0 } %>
...