2010-07-27 2 views
0

У меня возникла проблема с обновлением встроенных документов в mongodb.
У меня есть следующий сценарий. Модель пользователя имеет адрес как встроенные документы.
Я могу вставить адрес в родительскую модель, т.е. Модель пользователя, но я до сих пор не могу понять, как обновить адрес встроенного даже если у меня есть _id адреса встроенного
обновление встроенных документов mongodb с mongoid

Пожалуйста, помогите
Благодарности

ответ

2

Вы должны получить внедренный документ от родителя, а затем выполните операцию обновления, например:

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

спасибо за ответ jpemberthy, , но это все еще не работает для меня. Я могу отчетливо видеть в своем журнале развития вот так: project_name_development ['people']. Update ({"_ id" => BSON :: ObjectID ('4c5106b6f1936f036c000008'), "address._id" => "4c5106b6f1936f036c000006"}, { «$ set» => {«address.city» => «bhaktapur», «address.province» => «kathmandu»}}) , который, я думаю, должен обновить адрес. И у меня есть «address.update_attributes (address_attribute)» в моей модели Person, где address_attribute - хэш адреса Я что-то пропустил? – Gagan

+0

Я не уверен, что может произойти тогда. Если вы хотите, вставьте консольный поток и код модели в суть, так что вам будет легче помочь. – jpemberthy

+0

спасибо, что ответили. Я понял, что в моей модели есть ошибка, поэтому она не обновляется. еще раз спасибо – Gagan

1

Есть еще одно решение. Если между классами Person и Preference существует взаимосвязь «многие-ко-многим», то:

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"

Смежные вопросы