我有一个mongoid文档,它嵌入了其他具有类似关系的文档:
embeds_many:块
创建新的块工作得很好,但我不能设法改变现有嵌入文档的顺序。比如我有三个嵌入块,我想把最后一个移到第一个的位置。正确的做法是什么?
我必须使用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
上面的代码不是很好,但它让你知道如何做你想做的事情。我不喜欢为了重新排序数组而遍历这些,但就是这样了
我认为,真正正确的方法是在您的嵌入式文档字段"weight"中使用asc(:weight)或desc(:weight)查询它们。你不依赖于持久化的非嵌入式文档的顺序,所以你不应该在嵌入式。
但是如果你迫切需要这样做,你在mongoid中嵌入的文档只是数组,所以你可以这样做:
doc.embedded_docs = [doc.embedded_docs.last] + doc.embedded_docs[0..-2]