Hello guys I have array of hashes:
@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"}]
I want to create div for each array hash (for example hash x) that's "parent_serno == 0", write their name inside the div and create another div inside of it, for every array hash that's "parent_serno == hash x [:serno]".
I tried to create partial:
<% 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 %>
and render it in a another html.erb document, but apparently it just doesn't work :( It only gives me the name of the first hash in the array and recursion stops there I guess.
I think the partial you need should look something like this:
_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 } %>
...