我目前确实有一个活动注册表格,注册表格中的参与者数量不限,因此您可以通过 javascript 附加表单,我从第一个必须参与者的 fields_for 生成器中复制了该表单。
现在我有一个性别字段,它被称为:性别,和其他 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'
在韦布里克。
我对如何继续感到有些困惑,可能给所有输入提供索引,这感觉一点也不像 rails-way。
有什么建议如何让它工作吗?我的目标是为每个参与者发送性别。
最好的问候和感谢,丹尼尔
代码,简化:表格:
= 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,用于一个有效的输入和性别:
%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.