我有一个mongoid文档,它嵌入了其他类似的文档 这样:
embeds_many:blocks
创建新块工作正常,但我无法改变 现有嵌入式文件的顺序。例如,我有三个 嵌入式块,我想将最后一个移到第一个 这是怎么回事?
答案 0 :(得分:2)
我不得不用mongoid的recursively_embeds_many功能处理这个问题,但它基本上是一样的。据我所知,重写文档并没有错。写一个模型方法来做类似的事情:
def reverse_blocks
reversed_blocks = blocks.to_a.reverse
blocks.clear
reversed_blocks.each do |b|
blocks.create b.attributes
end
save
end
这不是上面的优秀代码,但它可以让您了解如何做您想做的事情。我不会因为只是为了重新排序数组中的内容而感到激动,但它确实如此。
答案 1 :(得分:1)
我认为,真正正确的方法是在嵌入式文档字段“权重”中生成并使用asc(:weight)或desc(:weight)查询它们。您不依赖于持久化的非嵌入式文档的顺序,因此您不应该嵌入。
但如果您迫切需要这样做,那么mongoid中的嵌入式文档就是数组,所以你可以这样做:
doc.embedded_docs = [doc.embedded_docs.last] + doc.embedded_docs[0..-2]