Построение 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 } %>
...