Ruby on rails 更新mongoid中嵌入文档的最佳方法

Ruby on rails 更新mongoid中嵌入文档的最佳方法,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我将我的项目从mysql迁移到mongodb,遇到了一些问题 如何以ActiveRecord的方式更新嵌入文档中的属性?在mongoid中有可能吗 class Template include Mongoid::Document include Mongoid::Versioning embedded_in :site, :inverse_of => :templates end class Site embeds_many :templates end

我将我的项目从mysql迁移到mongodb,遇到了一些问题

如何以ActiveRecord的方式更新嵌入文档中的属性?在mongoid中有可能吗

class Template
    include Mongoid::Document
    include Mongoid::Versioning

    embedded_in :site, :inverse_of => :templates
end

class Site
  embeds_many :templates
end
例如:

site = Site.find(params[:current_site_id])
template = site.templates.find(params[:id])

template.update_attributes(params[:template])
我得到:

Access to the collection for Template is not allowed since it is an embedded document, please access a collection from the root document.
好的,但是如何从根文档执行呢

编辑:


看起来我在模板中使用的Mongoid::版本控制会带来一些麻烦。我删除了包含的模块,一切正常。

有一个pb,使用mongoid的嵌入式文档版本控制,如果您使用的是paranoia模式,也是如此。 我建议您停用嵌入式文档的这些选项,如果您真的需要,您可以自己复制这些功能


Alex

您使用的是哪个版本的mongoid?因为模板是一个嵌入文档,如果您将mongoid::Versioning添加到站点模型中,它将对嵌入文档的任何更改进行版本化。因为嵌入文档实际上是父文档的一部分,而不是关系。