ActiveAdmin - 如何显示类别分类? (在树型层次结构中)

时间:2011-11-12 13:36:56

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 activeadmin

我有一个模型category,其中包含一个名为category.parent_id的字段,用于创建分类(带有子类别的顶级类别)。

目前,我的索引页面将类别显示为:

Top level category
Sub category
Sub category
Top category

我如何在适当的分类中订购它们(即首先从db然后子类别中获取所有顶级类别等)并显示如下:

Top level category
-- Sub category
-- Sub category
Top category

2 个答案:

答案 0 :(得分:3)

经过几个小时的撞击墙头,我想出了这个解决方案:

ActiveAdmin可以渲染整个索引的部分内容,但是您可以为单个列渲染一个!

因此,解决方法是为子类别创建一个列,如下所示:

    column "Sub Categories" do |category|
      children = Category.children(category.id)
      if children.present?
        render :partial => "children", :locals => { :children => children }
      end
    end

然后在_children.html.erb视图中,您可以打印出这样的列表:

    <% children.each do |child| %>
        <p><%= link_to child.name, edit_admin_category_path(child) %></p>
    <% end %>

答案 1 :(得分:1)

您可以在这种情况下创建一个类似于此的自引用模型(在app/model/category.rb中):

belongs_to :parent, :class_name => 'Category', :foreign_key => 'parent_id'
has_many :children, :class_name => 'Category', :foreign_key => 'parent_id'

然后你可以为父母创建一个范围

scope :parents, where("parent_id IS NULL")

在视图中你可以像这样使用迭代

<ul>
<% Category.all.parents.each do |parent| %>
     <li class="parent"><%= link_to parent.name, parent %></li>
     <% parent.children.each do |child| %>
          <li class="sub"><%= link_to child.name, child %></li>
     <% end %>
<% end %>
</ul>

希望这能帮到你!

//我读了我想读的内容,...我没有看到它是关于活跃的管理员。认为这是关于ActiveRecord -.-