Jan*_*Jan 3 ruby tree ruby-on-rails mongoid
我对mongoid和rails很新.所以我有一些麻烦让树结构工作:
我找到了三个"解决方案"来构建
mongoid-tree(这是最实际的) https://github.com/benedikt/mongoid-tree
并且mongoid提供了recursively_embeds_more的解决方案
mongoid_acts_as_tree https://github.com/saks/mongoid_acts_as_tree
我的目标是为音乐风格制作一棵树,可以在不同的模型中引用/嵌入.
我的模型现在看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
和观点
<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>
Run Code Online (Sandbox Code Playgroud)
我现在搜索了几个小时的工作示例,没有成功.
也许有人可以为我提供一些代码以便更好地理解
任何帮助都会让我的一天
很多,非常感谢提前
小智 5
不能使用mongoid-tree和recursively_embeds_many在一起.您必须在使用references(mongoid-tree)或嵌入式树(recursively_embeds_many)的树之间进行选择.如果你想将树嵌入其他模型中,我建议使用后者.如果你想从其他模型中引用音乐风格(例如将它们用作类别并让它们有许多不同的艺术家)我会推荐这种mongoid-tree方法.在这两种情况下,您都不需要该parent字段.
所以使用的示例mongoid-tree可能如下所示:
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
Run Code Online (Sandbox Code Playgroud)
你使用just的例子recursively_embeds_many看起来像这样:
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)
Run Code Online (Sandbox Code Playgroud)
最好成绩,
本尼迪克特
| 归档时间: |
|
| 查看次数: |
1448 次 |
| 最近记录: |