私は現在、イベントサインアップ用のフォームを持っており、サインアップフォームには無制限の参加者がいるので、最初の必須参加者の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.