Ruby on rails rails 3中接受\u嵌套的\u属性\u的帮助

Ruby on rails rails 3中接受\u嵌套的\u属性\u的帮助,ruby-on-rails,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3.1,我有以下型号: class Address < ActiveRecord::Base validates_presence_of :street, postal_code end class Person < ActiveRecord::Base belongs_to :address belongs_to :work_address, :class_name => 'Address' accepts_nested_attributes_for :addre

我有以下型号:

class Address < ActiveRecord::Base
  validates_presence_of :street, postal_code
end

class Person < ActiveRecord::Base
  belongs_to :address
  belongs_to :work_address, :class_name => 'Address'

  accepts_nested_attributes_for :address, :work_address

  def initialize(params={})
    params[:address] = Address.new
    params[:work_address] = Address.new
    super
  end
end
我得到了一个地址字段已填充的person对象,但工作地址字段为空。但是,当我尝试以下操作时,它会起作用:

p.work_address_attributes = {:street => "bar", :postal_code => "45632-964"}
在我看来,我有以下代码:

<%= form_for(@person) do |form| %>
...
<%= form.fields_for :address do |address| %>
  <%= address.text_field :street %>
  <%= address.text_field :postal_code %>
<% end %>

<%= form.fields_for :work_address do |work_address| %>
  <%= work_address.text_field :street %>
  <%= work_address.text_field :postal_code %>
<% end %>

<%= form.submit %>
<% end %>

...

怎么了?

您是否尝试注释掉初始化函数中设置新地址对象的
参数[:work\u address]
的行?如果使用嵌套属性,则不需要设置它。如果你真的需要这两行,我会把它们改成这样:

params[:work_address] = Address.new if params[:work_address_attributes].nil?

接受
的_嵌套_属性_应该为您处理该逻辑。也许您的地址对象正在覆盖您在散列中传递的内容?

您是否尝试注释掉初始化函数中将
参数[:work\u address]
设置为新地址对象的行?如果使用嵌套属性,则不需要设置它。如果你真的需要这两行,我会把它们改成这样:

params[:work_address] = Address.new if params[:work_address_attributes].nil?

接受
的_嵌套_属性_应该为您处理该逻辑。也许您的地址对象正在覆盖您在散列中传递的内容?

否。我的地址对象不会覆盖任何内容。我提出的解决方案效果很好。我已经测试并得出结论,在构造函数中我根本不需要这个代码。但是当我删除它时,查看代码的:address的
form.fields\u不会呈现任何内容。有解决方案吗?没有。我的地址对象不会覆盖任何内容。我提出的解决方案效果很好。我已经测试并得出结论,在构造函数中我根本不需要这个代码。但是当我删除它时,查看代码的:address的
form.fields\u不会呈现任何内容。有什么解决办法吗?