如何在Rails 3.2中设置深层嵌套的表单

时间:2012-12-13 12:25:39

标签: ruby-on-rails ruby-on-rails-3 activerecord nested-forms nested-attributes

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

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

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

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

我的模型如下所示:

申请人:

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

ApplicantDataPointValue:

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

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

非常感谢任何见解。

1 个答案:

答案 0 :(得分:1)

根据我的理解,用户的表单也将有多个ApplicantDataPointValue字段。 (但该表单不允许创建新的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