我有一个包含字段id,name和parent_id的类别表。根类别有parent_id 0.现在我想在下拉列表中显示类别列表,并显示如下结构:
root_category
first_sub_category
sub_sub_category
another_sub_sub_category
second_sub_category
another_root_category
first_sub_category
second_sub_category
这是我的控制器:
def new
@category = Category.new
end
以下是观点:
<%= f.label :parent_category %>
<% categories = Category.all.map{|x| [x.name] + [x.id]} %>
<%= f.select(:parent_id, options_for_select(categories), {}, class: 'form-control') %>
请帮助。
答案 0 :(得分:4)
通过在application_helper.rb中添加这些函数来解决问题
def subcat_prefix(depth)
(" " * 4 * depth).html_safe
end
def category_options_array(current_id = 0,categories=[], parent_id=0, depth=0)
Category.where('parent_id = ? AND id != ?', parent_id, current_id ).order(:id).each do |category|
categories << [subcat_prefix(depth) + category.name, category.id]
category_options_array(current_id,categories, category.id, depth+1)
end
categories
end
并在我的视图中使用它们
<%= f.select(:parent_id, options_for_select(category_options_array), {}, class: 'form-control') %>