Вложенный выбор в Rails - PullRequest
       13

Вложенный выбор в Rails

2 голосов
/ 18 мая 2010

Я работаю над приложением Rails, которое использует categories для items.

Моя 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

Есть ли для этого помощник (что было бы здорово!)? Если нет, то как мне это сделать?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 18 мая 2010

Возможно, вы захотите посмотреть acts_as_nested_set или awesome_nested_set

1 голос
/ 19 мая 2010

awesome_nested_set сделал это куском пирога.

После установки я добавил lft и rgt в таблицу категорий и удалил самосоединение. Затем перестройте таблицу категорий, используя Category.rebuild!. Тогда выбор может быть легко заполнен так:

<%= f.select :parent_id, nested_set_options(Category, @category) {|c| "#{'-' * c.level} #{c.title}" } %>
0 голосов
/ 18 мая 2010

Может быть grouped_options_for_select поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...