首先,我是一般编程的新手,也是 Rails 的新手。我选择 Rails 是因为它似乎是一门容易上手的语言。对于我的项目,我将 MongoMapper 与 Rails 结合使用。
我正在尝试以与文档相同的形式处理嵌入式文档。
我有以下模型:
class User
include MongoMapper::Document
key :email, String, :required => true
key :first_name, String
key :last_name, String
key :role, String
many :addresses
timestamps!
end
class Address
include MongoMapper::EmbeddedDocument
key :location, String
key :street, String
key :city, String
key :zip, Integer
key :state, String
key :country, String
end
我想在创建/编辑文档的同时创建/编辑嵌入式文档。我试过使用 fields_for:
<% f.fields_for :address, @user.addresses do |address| -%>
<div class="field">
<%= address.label :street %><br />
<%= address.text_field :street %>
</div>
<% end %>
但是我明白了
undefined method `street' for #<\Array:0x0000010126e3f8>
提前谢谢你。
最佳答案
如果您在 User
上定义 addresses_attributes=
,
fields_for
将起作用。出于某种原因,如果您定义该方法,fields_for
实际上会更改其行为。
这是一个示例实现:
def addresses_attributes=(id_and_attrs)
id_and_attrs.each do |id, attrs|
address = self.addresses.find(id) || self.addresses.build(:id => id)
address.attributes = attrs
end
end
未经测试,因此您必须解决问题。特别是,我不记得如果地址是全新的因为用户是新用户,那么嵌套参数是如何以不同方式出现的。
关于ruby-on-rails - 以 Rails 形式处理 MongoMapper EmbeddedDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817439/