如何使用祖先Ruby on Rails创建类别树3

时间:2012-07-04 18:59:05

标签: ruby-on-rails ruby tree categories ancestry

我正在尝试使用祖先Ruby on Rails 3制作类别树。 我的_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 %>

我的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>

如何更改索引以显示所有类别树? 我试图将索引更改为:

<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>

但改变之后无法看到标题:#<Category:0xb5fb731c>#<Category:0xb5fb6fc0>

1 个答案:

答案 0 :(得分:3)

我假设您要显示从树的顶部到底部的所有类别的列表。

然后使用祖先,你必须依赖gem中给出的rootschildren方法。 例如:

<ul id="menu">
  <% Category.roots.each do |category| %>
     <li> <%= link_to h(category.title), category %>
        # depending on the depth of your tree it is better to rely on an helper
        # to drill into the level of the tree
        <% unless category.children.empty? %>
           <ul id="sub-menu"> 
             <% category.children.each do |subcategory| %>
                <li> link_to h(subcategory.title), subcategory </li>
             <% end %>
           </ul>
        <% end %>
     </li>
  <% end %>
</ul>

您可能会发现以下代码段对递归方法有用: http://dzone.com/snippets/acts-tree-category-display

相关问题