Меню выбора категории заказа в алфавитном порядке с awesome_nested_set - PullRequest
4 голосов
/ 21 декабря 2010

Используя awesome_nested_set с Rails 3, я создал систему иерархических категорий. Чтобы отобразить селектор категории в представлении, я использовал следующий код:

<%= form.select :parent_id, options_for_select(nested_set_options(Category, @category) {|i| "#{'-' * i.level} #{i.name}" }.unshift(["No Parent", nil]), @category.parent_id) %>

Я пытаюсь упорядочить категории в алфавитном порядке, по уровням. Если я изменю nested_set_options(Category, @category) на nested_set_options(Category.order("name"), @category), это приведет к переупорядочению всего списка категорий по имени; я хочу переупорядочить дочерние элементы каждого узла в алфавитном порядке по имени.

Например, я хочу, чтобы результирующее меню выбора было упорядочено следующим образом:

Animal
- Bird
-- Chicken
-- Hawk
- Fish
-- Cod
-- Goldfish
-- Trout
- Mammal
-- Cat
-- Primate
--- Chimpanzee
--- Human
-- Zebra
Plant
- Tree

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Хотя я незнаком с awesome_nested_set, вы можете дважды вызывать заказ в Rails 3.

Category.order(:level).order(:name)

Это должно упорядочить категорию по каждому уровню, а затем по имени на каждом уровне. Кроме того, вы можете добавить это в область действия модели по умолчанию.

class Category < ActiveRecord::Base
  default_scope order('level, name')
  ...
end

Заказы отлично подходят для области по умолчанию, потому что они не влияют на значения по умолчанию.

1 голос
/ 06 июня 2015

Вы можете использовать @item.children.except(:order).order("your_sort_column"), как предложено в этой статье: потрясающий порядок вложенных множеств на

...