1

我目前确实有一个活动注册表格,注册表格中的参与者数量不限,因此您可以通过 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.
4

1 回答 1

0

好的,因为单选按钮需要按它们的名称分组——这就是它们的意义——我不得不在这里破解我的方式。

在我的解决方案中,我刚刚添加了一些与数组无关的索引单选按钮,它们触发了一个 javascript 函数,该函数设置了正确的数组隐藏字段的值,该字段是之前的单选按钮。

作品。

于 2012-11-22T13:42:09.620 回答