在ruby中使用if else语句进行迭代.(沿w.祖先宝石)



最近第一次开始使用railsancestry 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

相关内容

  • 没有找到相关文章

最新更新