Вложенные категории с монгоидом

У меня есть модель mongoid с некоторыми записями, и я хочу организовать их по категориям. Категории должны иметь возможность вложения следующим образом:

Videos:
-Car video
-Gadgets Video
--iPad
--Android
Music:
-Pop
--Madonna
-Rap
--2pac
--50cent

Как я могу сделать это с помощью mongoid? Порядок категорий не имеет значения.


person Kir    schedule 21.02.2011    source источник


Ответы (3)


Я реализовал модель вложенных категорий с помощью «mongoid_tree. Это довольно прямолинейно.

root = Category.new { :name => "Root Category" }
child = Category.new { :name => "Child Category" }
childs_child = Category.new { :name => "Child Child Category" }

root.children << child
root.save
child.children << childs_child
child.save

# get all root categories
Category.where("parent_ids" => []).first
 => "#<Category _id: 4d63cbdf2507e40d03000018, child_ids: [BSON::ObjectId('4d63cbdf2507e40d03000019')], parent_ids: [], name: \"Root Category\">" 

Джулиан

person Julian Maicher    schedule 22.02.2011

Вы можете использовать вложенный набор Mongoid:

class Category
  include Mongoid::Document
  acts_as_nested_set
end

ОБНОВЛЕНО

Существуют различные шаблоны деревьев в MongoDB. Acts_as_nested_set — это решение DRTW (не изобретайте велосипед), но другие варианты могут подойти вам лучше.

person Voldy    schedule 21.02.2011
comment
Этот драгоценный камень поддерживает функции положения узла, такие как move_to_left_of(other_node), move_to_right_of(other_node), move_to_child_of(other_node)`... Мне это не нужно, и я хочу найти решение KISS. Спасибо, в любом случае :) - person Kir; 22.02.2011
comment
Извините, я не понял, в чем проблема на самом деле с этими методами. Даже самые простые acts_as_tree предоставляют вам move_xx методы. Вы можете использовать его или нет, это полностью зависит от вас. Как насчет рельсов? У него много методов, которые вы не используете. Разве Rails не KISS-способ создания веб-приложений? :) Только лучшие гемы, портированные для монгоидов на сегодняшний день. И AwesomeNestedSet — один из них. Кстати, если вы найдете другое решение, опубликуйте его здесь :) - person Voldy; 22.02.2011

Для вложенного набора монгоидов правильная ссылка: https://github.com/thinkwell/mongoid_nested_set.

Действительно хорошая библиотека. act_as_nested использует меньше запросов.

person logda    schedule 06.04.2012