我正在尝试制作一个注册表单,您可以同时创建用户和公司。我有一个用户表和一个公司表。
用户模型
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
我确实将它添加到用户控制器中,但它似乎不是最好的解决方案。如果我错了,请纠正我。
提前致谢
答案 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 %>
它对我有用:)