1

私は現在、イベントサインアップ用のフォームを持っており、サインアップフォームには無制限の参加者がいるので、最初の必須参加者のfields_forジェネレーターからコピーしたjavascriptを介してフォームを追加できます。

今、私は性別フィールドを持っています。これは単に:genderと呼ばれ、他の個人データに対する他の10個の入力と同様です。

ただし、性別フィールドは、参加者全員に送信されない唯一のフィールドです。フィールドが欠落しているだけです。

たとえば、fields_forヘルパーはそれに名前を付けました。

event[participants][][email]
event[participants][][gender]

3人の参加者を追加すると、次のような配列が得られます。

[{email: email1, gender: male}, {email:email2}, {email:email3}]

レールに設定します。

ラジオボタンはその名前でグループ化されているので、空の角かっこにインデックスを追加して、次のようにすることができると思いました。

event[participants][1][gender]

2番目の参加者のために。

これはにつながります

ERROR TypeError: expected Array (got Rack::Utils::KeySpaceConstrainedParams) for param `participants'

Webrickで。

続行する方法について少し混乱しています。すべての入力にインデックスを付けているのかもしれませんが、これはまったくレールウェイのようには感じられません。

これを機能させる方法について何か提案はありますか?私の目的は、参加者ごとに性別を送信することです。

よろしくお願いします、ダニエル

簡略化されたコード:

フォーム:

= form_for @signup do |f|
    - participant_count = @signup.participants.count
    - @signup.participants.each_with_index do |participant,index|
      = f.fields_for "participants[]", participant do |p|
      = render :partial=>'participant_form', |
        :locals=>{:p=>p, :participant=>participant, :index=>index, :participant_count => participant_count}

_participant-partial、機能する1つの入力と性別:

%table
  %tr
   %th
    Gender / Only sent for the first participant:(
    %span *
  %td
    =p.radio_button :gender, 'male'
    %span  Male
    =p.radio_button :gender, 'female'
    %span Female

%tr
  %th
    Name
    %span *
  %td
    = p.text_field :first_name / this works just fine! for EACH participant.

結果は次のHTMLコードになります。

 <input id="event_participants__first_name" name="event[participants][][first_name]" size="30" type="text" value="" />
  and
 <input id="event_participants__gender_male" name="event[participants][][gender]" style="float:left; margin-right: 20px;" type="radio" value="male">
  for each participant.
4

1 に答える 1

0

さて、ラジオボタンは名前でグループ化する必要があるので(これはそれらの意味です)、私はここで自分の道をハックしなければなりませんでした。

私のソリューションでは、以前はラジオボタンであった適切な配列の非表示フィールドの値を設定するjavascript関数をトリガーする、配列に関連しないインデックス付きラジオボタンをいくつか追加しました。

動作します。

于 2012-11-22T13:42:09.620 に答える