0

Railsでかなり複雑なネストされたフォームを作成しようとしていますが、行き詰まっています。

基本的に、私は3つのモデルを持っています- Applicant、、。DataPointApplicantDataPointValue

ユーザーは、新しい名前を作成しDataPoint、名前( "gender"など)を付けて、タイプ( "string"、 "integer"など)を選択できます。タイプは、データが最終的に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

DataPoint:

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

しかし、コントローラーの「new」セクションと「create」セクションで何をするか、またはフォームを作成する方法に迷っています。

任意の洞察をいただければ幸いです。

4

1 に答える 1

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

于 2012-12-13T16:15:01.760 に答える