用mongoid更新嵌入式文件mongodb

时间:2010-07-27 15:54:23

标签: ruby-on-rails embedded-resource documents mongoid

我在更新mongodb中的嵌入文档时遇到问题 我有以下情况。 用户模型具有作为嵌入式文档的地址 我能够将地址嵌入到父模型中;用户模型,但即使我有嵌入地址的_id,我仍然无法弄清楚如何更新嵌入的地址

请帮助
感谢

2 个答案:

答案 0 :(得分:2)

您必须从父级检索嵌入的文档,然后进行更新操作,例如:

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

答案 1 :(得分: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"