Gagan
Gagan

Reputation: 4378

update embedded documents mongodb with mongoid

I am having problem updating the embedded documents in mongodb.
I have a following scenario. A User model has address as the embedded docs.
I am able to embed the address to the parent model ie; User model but i still cant figure out how to update the address embedded even though i have the _id of the address embedded

Please help
Thanks

Upvotes: 0

Views: 6248

Answers (2)

nickh
nickh

Reputation: 4841

There's another solution. If there's a many-to-many relationship between the Person and Preference classes, then:

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"

Upvotes: 1

jpemberthy
jpemberthy

Reputation: 7533

You have to retrieve the embedded document from the parent and then make the update operation, e.g:

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

Upvotes: 2

Related Questions