2010-07-27 18 views
0

J'ai un problème lors de la mise à jour des documents incorporés dans mongodb.
J'ai un scénario suivant. Un modèle d'utilisateur a une adresse en tant que documents intégrés.
Je suis capable d'intégrer l'adresse au modèle parent, c.-à-d. modèle de l'utilisateur, mais je ne peux toujours pas à comprendre comment mettre à jour l'adresse intégrée même si je le _id de l'adresse intégrée
mise à jour des documents incorporés mongodb avec mongoid

S'il vous plaît aider
Merci

Répondre

2

Vous devez récupérer le document incorporé du parent puis effectuer l'opération de mise à jour, par exemple:

address = user.address 
address.update_attributes(:street => "foo") 
+0

merci pour la réponse jpemberthy, mais cela ne fonctionne toujours pas pour moi. Je peux clairement voir dans mon journal de développement comme ceci project_name_development ['people']. Update ({"_id" => BSON :: ObjectID ('4c5106b6f1936f036c000008'), "address._id" => "4c5106b6f1936f036c000006"}, { "$ set" => {"address.city" => "bhaktapur", "address.province" => "kathmandu"}}) qui je pense devrait mettre à jour l'adresse. Et j'ai "address.update_attributes (address_attribute)" dans mon modèle de personne où address_attribute est le hachage de l'adresse Ai-je raté quelque chose? – Gagan

+0

Je ne sais pas ce qui pourrait se passer alors, Si vous voulez, s'il vous plaît coller un flux de la console et le code des modèles dans un sens, il sera donc plus facile de vous aider. – jpemberthy

+0

merci de répondre. J'ai compris qu'il y a une erreur dans mon modèle, donc ce n'est pas mise à jour. merci encore – Gagan

1

Il existe une autre solution. S'il y a une relation many-to-many entre les classes Person et Preference, alors:

ruby-1.9.2-p0 > Person.count 
=> 0 
ruby-1.9.2-p0 > Preference.count 
=> 0 
ruby-1.9.2-p0 > person = Person.create 
=> #< Person _id: 4cd353e92b58af214b000006, preference_ids: []> 
ruby-1.9.2-p0 > pref = Preference.create 
=> #< Preference _id: 4cd353ee2b58af214b000007, person_ids: [], name: nil> 
ruby-1.9.2-p0 > 
ruby-1.9.2-p0 > person.preferences << pref 
=> true 
ruby-1.9.2-p0 > Preference.first.people.count 
=> 1 
ruby-1.9.2-p0 > Person.first.preferences.count 
=> 1 
ruby-1.9.2-p0 > 
ruby-1.9.2-p0 > person.preferences.first.name = 'foobar' 
=> "foobar" 
ruby-1.9.2-p0 > person.preferences.first.save 
=> true 
ruby-1.9.2-p0 > pref.reload 
=> #< Preference _id: 4cd353ee2b58af214b000007, person_ids: [BSON::ObjectId('4cd353e92b58af214b000006')], name: "foobar"> 
ruby-1.9.2-p0 > pref.name 
=> "foobar"