ruby-on-rails - 以 Rails 形式处理 MongoMapper EmbeddedDocument

标签 ruby-on-rails ruby forms mongodb mongomapper

首先,我是一般编程的新手,也是 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/

相关文章:

forms - jsp上的spring mvc多种形式

ruby-on-rails - osx 10.8.5 - Ruby on Rails - rails s 上的 rmagick 错误

ruby-on-rails - 如何让 RSpec 测试子目录中的 Controller ?

Ruby 多线程/多处理读物

ruby - 是否可以调用 defined?在动态实例变量名上?

jquery - reCaptcha Invisible,欧芹和ajax形式

ruby-on-rails - 如何卸载/拆卸引擎?

ruby-on-rails - 如果花费的时间超过 X 秒,则退出线程

表示性别或性别的 Ruby 约定

ruby-on-rails - ruby on rails 中的表单,将变量在一种形式之间传递到另一种形式