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置于您的创建操作中。