2

我有以下型号:

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 = {
  "address_attributes" => {:street => "foo", :postal_code => "45632-963"}
  "work_address_attributes" => {:street => "bar", :postal_code => "45632-964"}
}
Person.create(person)

我得到了一个填充了地址字段的人员对象,但是 work_adress 字段是空白的。但是,当我尝试时它可以工作:

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 %>

怎么了?

4

1 回答 1

0

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

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

accepts_nested_attributes_for应该为您处理该逻辑。也许您的地址对象覆盖了您在哈希中传递的内容?

于 2011-06-13T15:34:32.473 回答