凡@user是最近创建的用户,并且@person是现有的人员。
@user.person = @person
@user.save
或者:
User.new :person => @person, ... #other attributes
或PARAMS形式:
User.new(params[:user].merge({person => @person}))
至于形式去:
<% form_for @user do |f| %>
...
<% fields_for :person do |p| %>
<%= p.collection_select, :id, Person.all, :id, :name, :include_blank => "Use fields to create a person"%>
<%= p.label_for :name%>
<%= p.text_field :name %>
...
<% end %>
<% end %>
和用户控制器:
def create
@user = User.create(params[:user])
@person = nil
if params[:person][:id]
@person = Person.find(params[:person][:id])
else
@person = Person.create(params[:person])
end
@user.person = @person
...
end
这里存在嵌套窗体的问题。如何将现有人员与新用户联系起来? – EmFi 2009-10-23 22:00:02
是的,如果两者都是同时创建的,那就是我所做的,但是如果其中一个已经存在,这将无法工作。 – 2009-10-23 22:30:00
我更新了代码,使其即使在有人存在的情况下也能正常工作 – Mike 2009-10-24 02:45:07