从"belongs_to"形式创建两个相关模型.一个(导轨) [英] Create both associated models from the form of the "belongs_to" one (rails)
问题描述
希望我的连续提问对任何人都不成问题,我想请您提供有关如何从一种形式创建两个模型的帮助.
两个关联的模型是
class Employee < ActiveRecord::Base
attr_accessible :name
belongs_to :company
attr_accessible :company_id
end
class Company < ActiveRecord::Base
attr_accessible :name
has_many :employees
end
,我想要的是在创建员工并且输入公司不存在时创建公司.没有当公司不存在时"的要求,这是我的代码:
employees/_form.html.erb
<%= simple_form_for(@employee) do |f| %>
<%= simple_form_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
和employees_controller.rb
def new
@employee = Employee.new
@company = Company.new
end
[...]
def create
@employee = Employee.new(params[:employee])
@company = Company.new(params[:company])
@employee.company_id = params[:company_id]
respond_to do |format|
if @employee.save
format.html { redirect_to @employee, notice: 'Employee was successfully created.' }
format.json { render json: @employee, status: :created, location: @employee }
else
format.html { render action: "new" }
format.json { render json: @employee.errors, status: :unprocessable_entity }
end
end
end
这种员工与公司之间的关联(员工持有"公司ID的关联),但是它并不能创建(或者,如果我理解得很好,实际上并不能保存)公司. /p>
如果我继续并在ID分配之前添加@company.save
,一切似乎都还好.是吗?我不应该渲染new company form
并在提交之后保存所有内容吗?
我整天都在网上搜索解决方案,但是在每种情况下,实施方式都是相反的:如何从新公司形式中创建一堆员工.
好的,经过大量的实验,我得出以下结论:
employees/_form.html.erb
<%= simple_form_for(@employee) do |f| %>
<%= simple_fields_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
employees_controller.rb
def create
@employee = Employee.new(params[:employee])
@company = Customer.find_or_create_by_name(params[:company][:name])
@company.employees << @employee
@company.save
@employee.save
end
它比@RadBrad提供的答案稍微优雅一点,但也受到它的影响.
如果您需要了解如何实际填写 and [...] This some kind of association between the employee and the company (that of the employee "holding" the company id) but it doesn't create (or, if I understand well, doesn't actually save) the company. If I go on and add I have been searching online all day for the solution but in every case the implementation was performed the opposite way: How to create a bunch of employees from a new company form. Okay, after a lot of experimenting, I 've came down to this: It is slightly more elegant than the answer provided by @RadBrad but also influenced by it. if you need to know how to actually fill in all the attributes of the 这篇关于从"belongs_to"形式创建两个相关模型.一个(导轨)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!company
模型的所有属性,请遵循
employees/_form.html.erb
<%= simple_form_for(@employee) do |f| %>
<%= simple_form_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
employees_controller.rb
def new
@employee = Employee.new
@company = Company.new
end
def create
@employee = Employee.new(params[:employee])
@company = Company.new(params[:company])
@employee.company_id = params[:company_id]
respond_to do |format|
if @employee.save
format.html { redirect_to @employee, notice: 'Employee was successfully created.' }
format.json { render json: @employee, status: :created, location: @employee }
else
format.html { render action: "new" }
format.json { render json: @employee.errors, status: :unprocessable_entity }
end
end
end
@company.save
before the id assignment, everything seems okay. Is it, however? Shouldn't I render the new company form
and have everything saved after that is submitted?employees/_form.html.erb
<%= simple_form_for(@employee) do |f| %>
<%= simple_fields_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
employees_controller.rb
def create
@employee = Employee.new(params[:employee])
@company = Customer.find_or_create_by_name(params[:company][:name])
@company.employees << @employee
@company.save
@employee.save
end
company
model, follow this