Есть несколько способов сделать это. Самое простое - просто начать с корней и разобрать каждый узел и его дочерние элементы. Первое, что я хотел бы сделать, это сделать частичное для разметки узла:
_your_model.html.erb
<li>
<%= your_model.name %>
<% unless your_model.children.empty? %>
<ul>
<%= render your_model.children %>
</ul>
<% end %>
</li>
Затем отредактируйте ваше представление так, чтобы отображались первые корневые узлы:
<ul>
<% YourModel.roots.each do |node| %>
<%= render node %>
<% end %>
</ul>