公司和用户以一种形式创建

时间:2014-09-21 18:47:06

标签: ruby-on-rails ruby-on-rails-4

我正在尝试制作一个注册表单,您可以同时创建用户和公司。我有一个用户表和一个公司表。

用户模型

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,它属于他们刚刚创建的公司。我的users表中有company_id字段。有什么想法吗?

更新

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

我确实将它添加到用户控制器中,但它似乎不是最好的解决方案。如果我错了,请纠正我。

提前致谢

1 个答案:

答案 0 :(得分: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