Ruby on rails Mongoid“;“充当树的角色”;vs.“;递归地“u嵌入”u many“;vs.“;mongoid树“;
我对mongoid和rails很陌生。因此,我很难让树结构正常工作: 我找到了三个“解决方案”来构建 mongoid树(最真实的树) mongoid提供了解决方案 递归地嵌入更多 mongoid_充当_树 我的目标是为musicstyles创建一个树,它可以被引用/嵌入到不同的模型中Ruby on rails Mongoid“;“充当树的角色”;vs.“;递归地“u嵌入”u many“;vs.“;mongoid树“;,ruby-on-rails,ruby,tree,mongoid,Ruby On Rails,Ruby,Tree,Mongoid,我对mongoid和rails很陌生。因此,我很难让树结构正常工作: 我找到了三个“解决方案”来构建 mongoid树(最真实的树) mongoid提供了解决方案 递归地嵌入更多 mongoid_充当_树 我的目标是为musicstyles创建一个树,它可以被引用/嵌入到不同的模型中 -房子 ---科技馆 ---最小房屋 -民间的 ---非洲人 ---亚洲人 -金属 ---重金属 ---死亡金属 我的模型现在看起来像这样: class Musicstyle include Mong
- -房子
- ---科技馆
- ---最小房屋
- -民间的
- ---非洲人
- ---亚洲人
- -金属
- ---重金属
- ---死亡金属
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Tree # mongoid-tree Version
recursively_embeds_many # mongoids version itself
field :musicstyle, type: String
field :description, type: String
field :parent
end
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Tree
field :musicstyle, type: String
field :description, type: String
end
# Usage example
musicstyle = Musicstyle.find(...)
musicstyle.children # This music style's children
musicstyle.parent # This music style's parent
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
recursively_embeds_many
field :musicstyle, type: String
field :description, type: String
end
# Usage example
musicstyle = Musicstyle.find(...)
musicstyle.child_musicstyles # This music style's children
musicstyle.children.first.parent_musicstyle # The first child's parent (as you can't use find to get an embedded music style)
那景色呢
<div class="field">
<%= f.label :parent %>
<%= f.select :parent,
Musicstyle.all.map { |m| [m.musicstyle, m._id] },
{:include_blank => "Select a parent (if needed)"} %>
</div>
“选择父项(如果需要)”}%>
我现在搜索了几个小时寻找一个有效的例子,但没有成功
也许有人能给我一些代码,让我更好地理解
任何帮助都会使我高兴
很多很多提前感谢您不能使用
mongoid树
和递归地将许多
嵌入在一起。您必须在使用引用的树(mongoid树
)或嵌入的树(递归地嵌入多个
)之间进行选择。如果你想在其他模型中嵌入树,我推荐后者。如果您想参考其他模型的音乐风格(例如,将它们作为类别使用,并使它们具有许多不同的艺术家),我建议使用mongoid树
方法。在这两种情况下,您都不需要parent
字段
因此,您使用mongoid树的示例可能如下所示:
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Tree # mongoid-tree Version
recursively_embeds_many # mongoids version itself
field :musicstyle, type: String
field :description, type: String
field :parent
end
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Tree
field :musicstyle, type: String
field :description, type: String
end
# Usage example
musicstyle = Musicstyle.find(...)
musicstyle.children # This music style's children
musicstyle.parent # This music style's parent
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
recursively_embeds_many
field :musicstyle, type: String
field :description, type: String
end
# Usage example
musicstyle = Musicstyle.find(...)
musicstyle.child_musicstyles # This music style's children
musicstyle.children.first.parent_musicstyle # The first child's parent (as you can't use find to get an embedded music style)
您的示例仅使用递归方式嵌入了许多
,如下所示:
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Tree # mongoid-tree Version
recursively_embeds_many # mongoids version itself
field :musicstyle, type: String
field :description, type: String
field :parent
end
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Tree
field :musicstyle, type: String
field :description, type: String
end
# Usage example
musicstyle = Musicstyle.find(...)
musicstyle.children # This music style's children
musicstyle.parent # This music style's parent
class Musicstyle
include Mongoid::Document
include Mongoid::Timestamps
recursively_embeds_many
field :musicstyle, type: String
field :description, type: String
end
# Usage example
musicstyle = Musicstyle.find(...)
musicstyle.child_musicstyles # This music style's children
musicstyle.children.first.parent_musicstyle # The first child's parent (as you can't use find to get an embedded music style)
最好的
Benedikt我在这里发布了我的解决方案: 模型 控制器
def new
@musicstyle = Musicstyle.new
@all_musicstyles = Musicstyle.all
end
def create
if params[:musicstyle][:parent_musicstyle]
parent = Musicstyle.find(params[:musicstyle].delete(:parent_musicstyle))
parent.child_musicstyles.create(params[:musicstyle])
end
@musicstyle = Musicstyle.new(params[:musicstyle])
end
看法