fields_for с переключателями в рельсах 3.2

В настоящее время у меня есть форма для регистрации на событие с неограниченным количеством участников в форме регистрации, поэтому вы можете добавлять формы через javascript, который я скопировал из генератора fields_for первого обязательного участника.

Теперь у меня есть гендерное поле, которое просто называется :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'

в Вебрике.

Я немного смущен тем, как продолжить, возможно, давая всем входным данным индекс, который совсем не похож на рельсы.

Любые предложения, как заставить это работать? моя цель - отправить пол для каждого участника.

С уважением и благодарностью, Даниил

the code, simplified:

форма:

= 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.

person thedanielhanke    schedule 05.11.2012    source источник
comment
Вы должны поделиться кодом, который вы используете для создания этой формы.   -  person sevenseacat    schedule 05.11.2012


Ответы (1)


хорошо, поскольку радиокнопки должны быть сгруппированы по их именам - в этом их смысл - мне пришлось взломать здесь свой путь.

в моем решении я просто добавил несколько индексированных переключателей, не связанных с массивом, которые запускают функцию javascript, которая устанавливает значение правильного скрытого поля массива, которое раньше было переключателями.

работает.

person thedanielhanke    schedule 22.11.2012
comment
У меня такая же проблема. Дэн :( - person Jimmy; 07.02.2013