Построение HTML с рекурсивным циклом в ruby ​​на рельсах

Привет, ребята, у меня есть массив хэшей:

@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"}]

Я хочу создать div для каждого хэша массива (например, хэша x), который "parent_serno == 0", записать свое имя внутри div и создать внутри него еще один div, для каждого хэша массива "parent_serno == hash x [: Серно]".

Я пытался создать частичное:

<% 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 ответ

Решение

Я думаю, что часть, которая вам нужна, должна выглядеть примерно так:

_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 } %>
...
Другие вопросы по тегам