2010-05-17 85 views
2

我正在使用categoriesitems的轨道应用程序。嵌套在轨道中选择

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 ]} %> 

所以选择看起来是这样的:

Category1 
Category2 
Category3BelongsTo2 
Category4BelongsTo1 

但我想要的是:

Category1 
    - Category4BelongsTo1 
Category2 
    - Category3BelongsTo2 

是否有这样的助手(这将是真棒!)?如果不是,我怎么能做到这一点?

谢谢!

回答

1

awesome_nested_set使这个小菜一碟。

安装完成后,我将lftrgt添加到类别表中,并删除了自加入。然后使用Category.rebuild!重建分类表。然后选择可以像这样容易地填充:

<%= f.select :parent_id, nested_set_options(Category, @category) {|c| "#{'-' * c.level} #{c.title}" } %>