嵌套在Rails中选择

时间:2010-05-17 21:32:36

标签: ruby-on-rails ruby forms select

我正在开发一个使用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

是否有帮助(这会很棒!)?如果没有,我怎么能做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可能需要查看acts_as_nested_setawesome_nested_set

答案 1 :(得分:1)

awesome_nested_set让这件事变得轻而易举。

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

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

答案 2 :(得分:0)

也许grouped_options_for_select可以帮到你