在RoR中编写嵌套表单
我正在尝试在ROR中编写嵌套表单。 我有两个表Employee
和EmployeeInfo
并且两个表都有一个名为employeeID
的列,这些表与此键连接。 我想要做的是创建一个带有一些输入字段的表单,这些字段应该将值更新到两个表中。
例如,我想要一个可以创建或更新名为employee_name
, age
, address
和city
字段的表单但是employee_name
和age
存在于表Employee
, city
和address
存在于EmployeeInfo
表中。 那么我该如何编写表单标签才能做到这一点。 如果问题是一个大错,请抱歉。 我真的很擅长这个。 请帮忙
扩展@ 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
在导轨4中,您需要使用
accepts_nested_attributes_for :employeeinfo
在您的员工模型中。 而且员工与emplyeeinfo的关系是has_one
。
forms如下:
<%= form_for @employe, :html => { :multipart => true } do |f| %> <% if @employe.errors.any? %> <%= pluralize(@employe.errors.count, "error") %> prohibited this employe from being saved:
<% @employe.errors.full_messages.each do |msg| %> - <%= msg %>
<% end %>
<% end %> <%= f.label :employee_name %>
<%= f.text_field :employee_name %> <%= f.label :age %>
<%= f.text_field :age %> <%= f.fields_for :employeeinfo do |s| %> <%= s.label :address %>
<%= s.text_field :address %> <% end %> <%= f.submit %> <% end %>
请根据您的型号名称编辑表单对象。
Foriegn Key
首先,您所指的“连接器”键称为foreign_key
。
这是一个标准的relational database
function,允许您将两个或多个数据库与一个参考点“连接”在一起。 无论何时在Rails中使用associations
,您基本上都必须使用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
forms
如Emu
,您需要使用accepts_nested_attributes_for
这允许您将数据从“父”模型传递到子模型,这正是您当前设置的模型。 不同之处在于您必须确保正确设置它。
无论你怎么想,这都是你需要做的。 你提到自己对Rails很新; 这意味着您的异议可能基于您当前的数据库设置。 这可能不正确
您应该使用emu
& Pavan
的答案来解决这个问题:)