带有mongoid的嵌套类别

时间:2011-02-21 21:01:14

标签: ruby-on-rails-3 mongoid

我的 mongoid 模型包含一些条目,并希望将它们组织成类别。类别应该有一个像这样嵌套的选项:

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

如何使用 mongoid 进行此操作?类别的顺序无关紧要。

3 个答案:

答案 0 :(得分:2)

您可以使用Mongoid Nested Set

class Category
  include Mongoid::Document
  acts_as_nested_set
end

<强>已更新

Trees in MongoDB有不同的模式。 Acts_as_nested_set是DRTW(不要重新发明轮子)解决方案,但其他人可能更适合你。

答案 1 :(得分:1)

我意识到了一个带有“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\">" 

儒略

答案 2 :(得分:1)

对于mongoid嵌套集,正确的链接是:https://github.com/thinkwell/mongoid_nested_set

非常好的lib。 acts_as_nested使用较少的查询。