我正在开发一个使用categories
items
的Rails应用程序。
我的category
模型是自我加入的,因此可以嵌套类别:
class Category < ActiveRecord::Base
has_many :items
# Self Join (categories can have subcategories)
has_many :subcategories, :class_name => "Category", :foreign_key => "parent_id"
belongs_to :parent, :class_name => "Category"
...
end
我有一个允许用户创建item
的表单,该表单目前列出了选择中的所有类别,但它们都列在一起:
<%= f.label :category_id %>
<%= select :item, :category_id, Category.all.collect {|c| [ c.title, c.id ]} %>
所以select看起来像这样:
Category1
Category2
Category3BelongsTo2
Category4BelongsTo1
但我想要的是:
Category1
- Category4BelongsTo1
Category2
- Category3BelongsTo2
是否有帮助(这会很棒!)?如果没有,我怎么能做到这一点?
谢谢!
答案 0 :(得分:3)
答案 1 :(得分:1)
awesome_nested_set让这件事变得轻而易举。
安装完成后,我将lft
和rgt
添加到类别表中,然后删除了自加入。然后使用Category.rebuild!
重建类别表。然后可以像这样轻松填充选择:
<%= f.select :parent_id, nested_set_options(Category, @category) {|c| "#{'-' * c.level} #{c.title}" } %>
答案 2 :(得分:0)
也许grouped_options_for_select可以帮到你