Rails 3嵌套表单

我有一个Person模型和一个地址模型:

class Person < ActiveRecord::Base has_one :address accepts_nested_attributes_for :address end class Address < ActiveRecord::Base belongs_to :person end 

在我的人员控制器中,我的新动作中有@person.build_address 。 我的表单构建正确。 问题是,当我提交表单时,会创建一个人员记录和一个地址记录,但它们不会通过Person表中的address_id列进行链接。

我错过了控制器中的一个步骤吗?

谢谢!

新行动更新

 def new @person = Person.new @person.build_address respond_to do |format| format.html # new.html.erb format.xml { render :xml => @person } end end 

表格代码更新

   

prohibited this person from being saved:















您需要在Person模型上使用accepts_nested_attributes_for :address才能正常工作。 在您的create操作中,您可以执行以下操作:

 def create @person = Person.new(params[:person]) ... end 

然后Rails会处理剩下的事情。

更新:如果address_id列在people表中,那么它应该是belongs_to :address ,而不是has_one :address

为什么您的地址是在新操作中构建的,而不是在创建操作中? 您正在从未保存的模型构建地址,而没有id,因此无法设置外键。 您应该将@person保留在新操作中,但在保存@person之后将build_address置于您的创建操作中。