【发布时间】:2019-11-28 04:35:10
【问题描述】:
我是 ruby on rails 的新手,我正在构建一个 wiki 应用程序,其中导航将按类别排序。每个文章或页面可以属于一个类别,但一个类别也可以是另一个类别的子类别。管理员将能够创建新的类别或子类别,需要动态方法来生成菜单的类别列表。我试图弄清楚如何显示所有父类别及其所有子孙类别的列表,其中菜单看起来像这样:
1. Parent1
1.a Child1
1.b Child2
2. Parent2
2.a Child1
2.a.1 Grandchild1
我目前有一些嵌套循环在我看来是哪种工作,但它不是动态的,因为它只会显示前两代,我必须重复代码才能显示更多。
型号:
class Category < ApplicationRecord
has_many :sub_categories, class_name: "Category", foreign_key: "category_id"
belongs_to :category, class_name: "Category", optional: true
end
控制器:
class CategoriesController < ApplicationController
def index
@sorted_categories = Category.order(:sort_number).where("category_id IS NULL")
@sub_categories = Category.order(:sort_number).where("category_id IS NOT NULL")
end
end
查看:
<% if @categories.nil? %>
<h3>There are currently no categories.</h3>
<% else %>
<ul>
<% @sorted_categories.each do |c| %>
<li><%= c.name %><%= link_to 'Move Up', categories_move_up_path(c) %> Sort:<%= c.sort_number %></li>
<% @sub_categories.each do |s| %>
<% if s.category_id == c.id %>
<ul>
<li>
<%= s.name %><%= link_to 'Move Up', categories_move_up_path(s) %> Sort:<%= s.sort_number %>
</li>
</ul>
<% end %>
<% end %>
<% end %>
</ul>
<% end %>
任何建议将不胜感激,谢谢!
【问题讨论】:
-
您可以将ancestry gem 用于树结构。它有很多功能
标签: ruby-on-rails model-view-controller