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

时间:2011-05-02 05:46:15

标签: ruby-on-rails-3 mongoid

我有一个mongoid文档,它嵌入了其他类似的文档 这样:

embeds_many:blocks

创建新块工作正常,但我无法改变 现有嵌入式文件的顺序。例如,我有三个 嵌入式块,我想将最后一个移到第一个 这是怎么回事?

2 个答案:

答案 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]