我正在尝试在ROR中编写嵌套表单。
我有两个表Employee
和EmployeeInfo
,两个表都有一个名为employeeID
的列
这些表与此密钥相关联。
我想要做的是创建一个带有一些输入字段的表单,这些字段应该将值更新到两个表中。
例如我想要一个可以创建或更新名为employee_name
,age
,address
和city
但employee_name
和age
字段的表单表Employee
中存在{}} city
和address
表示{}}
那么我应该如何编写表单标签来执行此操作。
如果问题是一个大错,请抱歉。我真的很擅长这个。请帮忙
答案 0 :(得分:2)
在rails 4中你需要使用
accepts_nested_attributes_for :employeeinfo
员工模型中的。 员工与 emplyeeinfo 的关系为has_one
。
形式:
<%= form_for @employe, :html => { :multipart => true } do |f| %>
<% if @employe.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@employe.errors.count, "error") %> prohibited this employe from being saved:</h2>
<ul>
<% @employe.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :employee_name %><br>
<%= f.text_field :employee_name %>
</div>
<div class="field">
<%= f.label :age %><br>
<%= f.text_field :age %>
</div>
<%= f.fields_for :employeeinfo do |s| %>
<%= s.label :address %><br>
<%= s.text_field :address %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
请根据您的型号名称编辑表单对象。
答案 1 :(得分:2)
扩展 @ emu的回答
模型设置
#employee.rb
Class Employee < ActiveRecord::Base
has_one :employe_info
accepts_nested_attributes_for :employee_info
end
#employee_info.rb
Class EmployeeInfo < ActiveRecord::Base
belongs_to :employee
end
<强>控制器强>
Class EmployeesController < ApplicationController
def new
@employee = Employee.new
@employee.build_employee_info
end
def create
@employee = Employee.new(employee_params)
if @employee.save
redirect_to @employee
else
render 'new'
end
end
private
def employee_params
params.require(:employee).permit(:employee_name, :age, employee_info_attributes: [:id, :city,:address])
end
end
答案 2 :(得分:1)
Foriegn Key
首先是&#34;连接器&#34;您引用的密钥称为foreign_key
。
这是一个标准relational database
功能,允许您加入&#34;两个或多个数据库以及单个参考点。每当您使用associations
in Rails时,您基本上必须使用foreign_key
两个表都有一个名为employeeID的列
您的employee_infos
表只需要包含foreign_key employee_id
:
#app/models/employee.rb
Class Employee < ActiveRecord::Base
has_one :employee_info #-> foreign key = "employee_id"
accepts_nested_attributes_for :employee_info
end
#app/models/employee_info.rb
Class EmployeeInfo < ActiveRecord::Base
belongs_to :employee
end
<强>表单强>
如Emu
所述,您需要使用accepts_nested_attributes_for
这允许您从父母传递数据&#34;模型到儿童模型,正是您目前设置的。不同之处在于您必须确保正确设置它。
无论您的想法如何,您都需要这样做。你提到自己,你对Rails很新;这意味着您的异议可能基于您当前的数据库设置。这可能不正确
你应该使用emu
&amp; Pavan
解决此问题的答案:)