在RoR中编写嵌套表单

我正在尝试在ROR中编写嵌套表单。 我有两个表EmployeeEmployeeInfo并且两个表都有一个名为employeeID的列,这些表与此键连接。 我想要做的是创建一个带有一些输入字段的表单,这些字段应该将值更新到两个表中。

例如,我想要一个可以创建或更新名为employee_nameageaddresscity字段的表单但是employee_nameage存在于表Employeecityaddress存在于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 databasefunction,允许您将两个或多个数据库与一个参考点“连接”在一起。 无论何时在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很新; 这意味着您的异议可能基于您当前的数据库设置。 这可能不正确

您应该使用emuPavan的答案来解决这个问题:)