2011-06-18 6 views
0

Je migre mon projet de mysql vers mongodb et j'ai quelques problèmes. Comment mettre à jour les attributs dans un document incorporé de manière ActiveRecord?Meilleure façon de mettre à jour un document incorporé dans mongoid

C'est possible en mongoïde?

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

    embedded_in :site, :inverse_of => :templates 
end 

class Site 
    embeds_many :templates 
end 

Par exemple:

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

template.update_attributes(params[:template]) 

J'obtenu:

Access to the collection for Template is not allowed since it is an embedded document, please access a collection from the root document. 

Ok, mais comment le faire à partir du document racine?

Modifier:

Il ressemble MongoId :: Versioning que je l'utilise dans le modèle faire quelques ennuis. Je retire le module inclus et tout fonctionne bien.

+0

Quelle version de mongoid utilisez-vous? –

+0

gem 'mongoid', '2.0.0' –

+1

Étant donné que les modèles sont un document incorporé, si vous ajoutez 'Mongoid :: Versioning' au modèle' Site' - il mettra à jour toutes les modifications apportées aux documents incorporés. Puisque les documents incorporés font en réalité partie du document parent - et non des relations. – theTRON

Répondre

0

Il existe un pb avec le versioning de mongoid avec des documents intégrés, même si vous utilisez le mode paranoïa. Je vous suggérerais de désactiver ces options pour vos documents intégrés et de répliquer la fonctionnalité vous-même si vous en avez vraiment besoin.

Alex

Questions connexes