Nested_form Бейтса с вложенным ресурсом неправильно называет новые поля

Сейчас я создаю клон stackru и пытаюсь реализовать несколько загрузок файлов при создании вопросов и ответов.

Я использую carrierwave с гемом nested_form.

Загрузка файла при создании вопроса работает нормально, но я не могу заставить его работать для ответов. Вот моя форма для нового ответа:

= nested_form_for [@question, @answer], remote: true do |f|
    = render 'shared/error_messages', object: f.object
    div.form-group
      = f.label :body
      = f.text_area :body, class: 'form-control'
    div.form-group
      = f.fields_for :attachments do |field|
        = field.label :file
        = field.file_field :file
        = field.link_to_remove "Remove this attachment"
      p
        = f.link_to_add "Moar files!", :attachments
    div.form-group
      = f.submit 'Post answer', class: 'btn btn-primary'

Это работает нормально, когда я пытаюсь загрузить один файл. Имя вложенного file_field выглядит так:

name="answer[attachments_attributes][0][file]"

Но когда я нажимаю "Moar files" и появляется другое файловое поле, оно называется

name="question[attachments_attributes][1429430703012][file]"

И поэтому в параметрах я получаю второй файл, привязанный к вопросу, а не к ответу. А поскольку запрос обрабатывается answers_controller, второй файл просто игнорируется.

Как правильно сделать nested_form_for name для нового поля?

UPD

Поэтому я попытался явно указать родительский объект для прикрепленных файлов, например:

= f.fields_for :attachments, @answer.attachments do |field|

Все еще не повезло

1 ответ

Решение

Оказывается, это старая проблема с nested_form, когда он используется более одного раза на странице для двух разных объектов с одинаковой полиморфной ассоциацией.

Здесь конфликт data-blueprint-id на вложенной форме для полиморфных ассоциаций является еще одним вопросом, описывающим ту же проблему. Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам