我想在下拉列表中显示层次结构类别。
每个子类别应略微缩进。
我的模型看起来像:
Category
id
parent_id
name
timestamps
我已经有了一个加载所有类别的方法。
categories = ...
我相信我必须以递归方式做到这一点。
我也有一个哈希,我通过循环遍历类别创建,这样我就可以通过它的id轻松获取一个类别。
map = {}
categories.each do |c|
map[c.id] = c
end
现在我需要有关如何递归构建select / dropdown语句并缩进子类别的帮助。
答案 0 :(得分:3)
让我们说你的课将是这样的
class Category < Struct.new(:id, :name, :parent_id)
end
打印下拉列表的功能
def print_child(categories, parent_id, html = '', symbol = '=')
categories.each do |category|
if category.parent_id == parent_id
node_html = "<option>#{ symbol } #{ category.name }<option>"
html += print_child(categories, category.id, node_html, symbol + symbol)
end
end
html
end
我将简单地创建一个类别数组
categories = [
Category.new(1, 'A', 0),
Category.new(2, 'B', 1),
Category.new(3, 'C', 2),
Category.new(4, 'D', 2),
Category.new(5, 'E', 1),
]
打印结果
html = print_child(categories, 0)
p html