2014-09-21 22 views
0

我试图做一个注册表单,您可以同时创建一个用户和一个公司。我有一个用户表和一个公司表。公司和用户以一种形式创建

用户模型

belongs_to :companies 
accepts_nested_attributes_for :companies 

公司模型

has_many :users 

用户控制器

def new 
@users = User.new 
@companies = Company.new 
end 

def create 
@companies = Company.create(company_params) 
@users = @companies.user.create(user_params) 
@users.save 
redirect_to :back 
end 

private 
def user_params 
params.require(:user).permit(:name) 
end 
def company_params 
params.require(:user).permit(:name) 
end 

路线

resources :users 
resources :companies 

new.html.erb

<%= form_for(@users) do |f| %> 
<%= f.label :name %> 
<%= f.text_field :name %> 

<%= f.fields_for @companies do |build| %> 
<%= build.text_field :name %> 
<% end %> 
<%= f.submit %> 
<% end %> 

所以这个创建公司,并在同一时间的用户。但是我想给用户分配一个company_id,它属于他们刚创建的公司。我的用户表中有company_id字段。有任何想法吗?

UPDATE

def create 
@companies = Company.create(company_params) 
c = Company.last 
@users = c.users.create(user_params) 
@users.save 
redirect_to :back 
end 

我这样做是添加到用户控制器在它的工作原理,但它并不似乎是最好的解决办法。如果我错了,请纠正我。

在此先感谢

回答

2

我将在下面的方式做:

你的用户模型

belongs_to :companies,:inverse_of => :users 
accepts_nested_attributes_for :companies 

你的控制器

def new 
    @users = User.new 
    @users.build_company 
end 

def create 
    @users = User.new(user_company_params) 
    @users.save 
end 

def user_company_params 
    params.require(:user).permit(:name, companies_attributes: name) 
end 

你查看

<%= f.fields_for :companies do |build| %> 
    <%= build.text_field :name %> 
<% end %> 

它为我:)

来源: http://guides.rubyonrails.org/association_basics.html