显示包含分层数据的下拉列表

时间:2014-07-08 21:04:10

标签: ruby-on-rails ruby

我想在下拉列表中显示层次结构类别。

每个子类别应略微缩进。

我的模型看起来像:

Category
  id
  parent_id
  name
  timestamps

我已经有了一个加载所有类别的方法。

categories = ...

我相信我必须以递归方式做到这一点。

我也有一个哈希,我通过循环遍历类别创建,这样我就可以通过它的id轻松获取一个类别。

map = {}

categories.each do |c|
  map[c.id] = c
end

现在我需要有关如何递归构建select / dropdown语句并缩进子类别的帮助。

1 个答案:

答案 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