rails 3 - Mongoid:改变embeds_many关系中文档的顺序



我有一个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]

相关内容

  • 没有找到相关文章

最新更新