Undr

На память

Записи с меткой ‘tree’

Добавление меток и древовидных категорий в Rails приложение на MongoMapper

without comments

1 Star2 Stars3 Stars4 Stars5 Stars (3 голосов, средний: 4.00 из 5)
Loading ... Loading ...

Написал undr ()

12 января 2010 в 15:40

Построение дерева из плоского массива

with 6 comments

1 Star2 Stars3 Stars4 Stars5 Stars (1 голосов, средний: 5.00 из 5)
Loading ... Loading ...

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

class Category < ActiveRecord::Base
  has_many :products
  acts_as_nested_set
end

И нам нужно в панели управления показывать дерево категорий. Мы можем взять категории первого уровня, показать их на сайте и по мере выбора категорий погружать ajax запросом их дочек. Получаем слишком много запросов и ненужные задержки при открытии категории.

Проще взять список категорий целиком и построить из него дерево. Потом его использовать для отображения на сайте. Для построения дерева потребуется закешированое свойство cached_level из предыдущего примера.

Читать далее »

Написал undr ()

6 сентября 2009 в 19:47

Кэширование свойства level в awesome_nested_set

without comments

1 Star2 Stars3 Stars4 Stars5 Stars (1 голосов, средний: 4.00 из 5)
Loading ... Loading ...

Плагин awesome_nested_set в целом достаточно удобный для работы с деревьями, но раздражает отсутствие поля level. Для вычисления level приходится каждый раз обращаться к базе.

Это бывает не удобно, когда нужно вытащить дерево целиком и построить его иерархию. Чтобы кэшировать level в базе данных можно в модель добавить такой код:

class Category < ActiveRecord::Base
  acts_as_nested_set
  after_move :caching_level

  private
  def caching_level
    self.cached_level = level
    save!
  end
end

Это добавит один запрос при перемещении узла, но удалит кучу запросов при формировании дерева.

Написал undr ()

6 сентября 2009 в 19:43

Размещено в Примеры, Программирование

Метки: ,