我有一个模型category
,其中包含一个名为category.parent_id
的字段,用于创建分类(带有子类别的顶级类别)。
目前,我的索引页面将类别显示为:
Top level category
Sub category
Sub category
Top category
我如何在适当的分类中订购它们(即首先从db然后子类别中获取所有顶级类别等)并显示如下:
Top level category
-- Sub category
-- Sub category
Top category
答案 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 -.-