最近第一次开始使用rails
和ancestry
gem。
我试图通过ancestry
宝石存储在树形结构中的Category
对象数组进行迭代,以显示按钮,连接到link_to
到其他类别对象,给定的类别与。
数据库中的前3个类别是根,因此我最终将没有足够的空间在视图中显示所有后代的按钮。因此,如果category.parent == 'nil'
,我想只显示给定类别的子类。
但是,对于所有其他类别对象,我希望显示给定类别的所有后代。
我一直在考虑这样的事情,因为迭代
<%= current_user.folders.each do |folder| %>
<% if folder.is_root? %>
<% folder.children.each do |child| %>
<%= link_to child, folder_path(child), class: 'btn' %>
<% end %>
<% else %>
<% folder.descendants.each do |desc| %>
<%= link_to desc, folder_path(desc), class: 'btn' %>
<% end %>
<% end %>
有人能给点建议吗?
您的孩子类别与他们的父母有什么关系?我假设categories
表有一个parent_id
列。
给定这些分类:
parent_category = Category.create!
child_category1 = Category.create! parent_id: parent_category.id
child_category2 = Category.create! parent_id: parent_category.id
现在您可以检查parent_id
是否为nil
,看看它是否是父类别,我们将添加自引用关联和范围到Category
模型:
class Category < ActiveRecord::Base
scope :parents, -> { where(parent_id: nil).joins :children }
has_many :children, class_name: "Category", foreign_key: :parent_id
end
现在你可以遍历父元素,并遍历每个父元素的子元素:
Category.parents.each do |parent|
parent.children.each do |child|
# code
end
end