我有一个像这样定义的User类
class User
end
我已经将其转换为创建所有者类并与另一个公司类创建了一个has_one关系
class Owner < User
has_one :company
end
class Company
belongs_to :owner
end
在我的用户控制器中创建新用户时,我想完成以下任务:
我可以使用以下代码完成此操作(简化为简洁)
def create
@user = User.new(params[:user])
@company = Company.new(params[:company])
if @user.save
@company.owner_id = @user.id
@company.save
...
现在,这对我来说感觉很难看,但我似乎无法使整个build_asociation过程按预期工作(是的,开发和测试都有字段)。
我应该在这做什么?
答案 0 :(得分:0)
如果您需要同时创建Owner
和Company
,建议您在accepts_nested_attributes_for
中使用Owner
。这是代码:
class Owner < User
has_one :company
accepts_nested_attributes_for :company
end
然后在您的控制器中,您可以执行以下操作:
def create
@user = User.new(params[:user]) # should it be User or Owner?
@user.company_attributes = params[:company] # assume two separate forms for User and Company
# if you use fields_for, however, company attributes are nested under params[:user] automatically.
if @user.save
# do your job here
end
end
如需完整参考,请查看Active Record Nested Attributes和视图帮助fields_for