views:

705

answers:

1

Hi, Is there a simple way to display the entire nested set when using this plugin? What I would like to do is display an unordered list of root nodes with another unordered list inside each child that also contains children and so on?

Any advice appreciated.

Thanks.

+4  A: 

There are a few ways to do this. The simplest is to just start with the roots and parse each node and it's children. The first thing I'd do is make a partial for a the node markup:

_your_model.html.erb

<li>
  <%= your_model.name %>

  <% unless your_model.children.empty? %>
    <ul>
      <%= render your_model.children %>
    </ul>
  <% end %>
</li>

Next edit your view so that the first root nodes are rendered:

<ul>
  <% YourModel.roots.each do |node| %>
    <%= render node %>
  <% end %>
</ul>
Jimmy Baker
I think you had a couple of typos there buddy. I think it would be <%= render 'partial_name', :collection => your_model.children %> inside of the partial; and in the outermost ul, you would do <%=render 'partial_name', :collection => YourModel.roots %> and completely get rid of the each.
jacortinas
Fixed the inner render to your_model.children. If you're using a newer version of rails you do not need to specify the name of the partial as long as you give it _the_name_of_your_model.html.erb. You also don't have to to pass in :collection. Rails will determine if it's a single instance or an array of objects.
Jimmy Baker