0

我正在尝试在 rails 中构建一个相当复杂的嵌套表单并且被卡住了。

基本上,我有三个模型 - ApplicantDataPointApplicantDataPointValue

用户可以创建一个新的DataPoint,给它一个名字(“性别”等)选择它的类型(“字符串”,“整数”等)。类型决定了数据最终将保存在ApplicantDataPointValue表中的哪一列。

然后我希望用户在创建新的Applicant时能够将每个值添加DataPointApplicantDataPointValue表中

我的模型如下所示:

申请人:

class Applicant < ActiveRecord::Base
  has_many :applicant_data_point_values, dependent: :destroy
  has_many :data_points, :through => :applicant_data_point_values

  accepts_nested_attributes_for :data_points
  accepts_nested_attributes_for :applicant_data_point_values

  attr_accessible :data_points_attributes, :applicant_data_point_values_attributes
end

数据点:

class DataPoint < ActiveRecord::Base
  has_many :applicant_data_point_values
  has_many :applicants, :through => :applicant_data_point_values
  accepts_nested_attributes_for :applicant_data_point_values
end

申请人数据点值:

class ApplicantDataPointValue < ActiveRecord::Base
  belongs_to :data_point
  belongs_to :applicant
end

但是我不知道在控制器的“新”和“创建”部分中做什么或如何构造表单。

任何见解将不胜感激。

4

1 回答 1

1

据我了解,用户的表单也将有多个申请人数据点值字段。(但该表单不允许创建新的 DataPoint 字段,对吧?)

在控制器new操作中,您需要使用关联的数据点值设置模型:

def new
  @user = User.new
  DataPoint.all.each do |data_point|
    applicant_data_point_value = @user.applicant_data_point_values.build
    applicant_data_point_value.data_point = data_point
  end
end

然后,为每个数据点值显示一个文本框。

<%= form_for @user do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>
  <% @user.applicant_data_point_values.each do |data_point_value| %>
  <%= f.fields_for :applicant_data_point_values, data_point_value do |fields| %>

    <%= fields.label :value, data_point_value.data_point.type %>
    <%= fields.text_field :value %>

  <% end %>
<% end %>

参考:http ://railscasts.com/episodes/196-nested-model-form-part-1

于 2012-12-13T16:15:01.760 回答