我正在尝试使用Mongoid使用父引用创建模型树结构,
但是父级被设置为null。
这是我的课:
class Category
include Mongoid::Document
field :name, type: String
belongs_to :parent, :class_name => 'Category'
end
这就是我创建类别的方式:
parent = Category.new(name: "Mobile").save!
child1 = Category.new(name: "Android", parent: parent).save!
child2 = Category.new(name: "iOS", parent: parent).save!
结果:
{
"categories": [
{
"_id": "511b84c5cff53e03c6000126",
"name": "Mobile",
"parent_id": null,
},
{
"_id": "511b84c5cff53e03c6000128",
"name": "Android",
"parent_id": null,
},
{
"_id": "511b84c5cff53e03c6000129",
"name": "iOS",
"parent_id": null,
}
]
}
父项甚至没有存储在DB:中
{ "name" : "Mobile", "_id" : "511b84c5cff53e03c6000126" }
{ "name" : "Android", "_id" : "511b84c5cff53e03c6000128" }
{ "name" : "iOS", "_id" : "511b84c5cff53e03c6000129" }
我做错了什么?
谢谢
Roei
除了声明belongs_to
关联之外,还需要声明相反的has_many
关联,即使它在同一个类上。
class Category
include Mongoid::Document
field :name, type: String
has_many :children,
class_name: 'Category',
inverse_of: :parent
belongs_to :parent,
class_name: 'Category',
inverse_of: :children
end
您可以通过关联来分配父级或子级。
parent = Category.create
child1 = Category.create
child2 = Category.create
parent.children << child1
parent.children << child2
然后,子级将存储对父级的引用。
最终,当我单独保存时(与创建不在同一行),它就起了作用。
之前(不能正常工作):
parent = Category.new(name: "Mobile").save!
child1 = Category.new(name: "Android", parent: parent).save!
child2 = Category.new(name: "iOS", parent: parent).save!
之后(工作!):
parent = Category.new(name: "Mobile")
child1 = Category.new(name: "Android", parent: parent)
child2 = Category.new(name: "iOS", parent: parent)
parent.save
child1.save
child2.save
结果(如预期):
{ "name" : "Mobile", "_id" : "511b84c5cff53e03c6000126" }
{ "name" : "Android", "parent_id" : "511b84c5cff53e03c6000126", "_id" : "511b84c5cff53e03c6000128" }
{ "name" : "iOS", "parent_id" : "511b84c5cff53e03c6000126", "_id" : "511b84c5cff53e03c6000129" }
非常感谢所有响应者!