I’m trying to make category tree using ancestry Ruby on Rails 3.
My _form.html.erb
<%= form_for(@category) do |f| %>
<% if @category.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@category.errors.count, "error") %> prohibited this category from being saved:</h2>
<ul>
<% @category.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :ancestry %><br />
<%= f.collection_select :ancestry, Category.all(:order => "title"), :id, :title, :include_blank => true %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
My index.html.erb:
<ul id="menu">
<% for category in @categories %>
<li><%= link_to h(category.title), category %>
<%= link_to "subcategory", new_category_path(:parent_id => category) %> |
<%= link_to "Destroy", category, :confirm => "Are you sure?", :method => :delete %>
<%= link_to 'Show', category %>
</li>
<% end %>
</ul>
How should I change index to show all category tree?
I was trying to change index to:
<ul id="menu">
<% for category in @categories %>
<li><%= category.subtree.all(:order => :title, :limit => 10) %>
<%= link_to "subcategory", new_category_path(:parent_id => category) %> |
<%= link_to "Destroy", category, :confirm => "Are you sure?", :method => :delete %>
<%= link_to 'Show', category %>
</li>
<% end %>
</ul>
But after change can’t see titles just: #<Category:0xb5fb731c>#<Category:0xb5fb6fc0>
I assume you want to display the list of all the categories from the top to the bottom of the tree.
Then using ancestry you have to rely on the
rootsandchildrenmethods given in the gem.For instance:
May be you will find the following snippet usefull for the recursive approach:
http://dzone.com/snippets/acts-tree-category-display