我有一个模型category
,其中包含一个名为category.parent_id
的字段,该字段用于创建分类法(顶级类别与子类别)。
目前我的索引页显示的类别如下:
Top level category
Sub category
Sub category
Top category
我如何在一个适当的分类法中对它们进行排序(即首先所有顶级类别都取自数据库,然后是子类别等),并显示如下:
Top level category
-- Sub category
-- Sub category
Top category
经过几个小时的绞尽脑汁,我想出了这样一个解决方案:
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 %>
您可以像这样创建一个自引用模型(在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的- -