2014-09-21 19 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