Записи с меткой ‘tree’
Добавление меток и древовидных категорий в Rails приложение на MongoMapper
Продолжение статьи Пример написания приложения на Rails с использованием MongoDB и MongoMapper вместо MySQL и ActiveRecord.
Построение дерева из плоского массива
Когда нам надо работать со всем деревом сразу, иногда, бывает нужно построить дерево из плоского массива. К примеру у нас есть категории товара
has_many :products
acts_as_nested_set
end
И нам нужно в панели управления показывать дерево категорий. Мы можем взять категории первого уровня, показать их на сайте и по мере выбора категорий погружать ajax запросом их дочек. Получаем слишком много запросов и ненужные задержки при открытии категории.
Проще взять список категорий целиком и построить из него дерево. Потом его использовать для отображения на сайте. Для построения дерева потребуется закешированое свойство cached_level из предыдущего примера.
Кэширование свойства level в awesome_nested_set
Плагин awesome_nested_set в целом достаточно удобный для работы с деревьями, но раздражает отсутствие поля level. Для вычисления level приходится каждый раз обращаться к базе.
Это бывает не удобно, когда нужно вытащить дерево целиком и построить его иерархию. Чтобы кэшировать level в базе данных можно в модель добавить такой код:
acts_as_nested_set
after_move :caching_level
private
def caching_level
self.cached_level = level
save!
end
end
Это добавит один запрос при перемещении узла, но удалит кучу запросов при формировании дерева.

(3 голосов, средний: 4.00 из 5)