Rails 5: Отправка нескольких форм с помощью одной кнопки отправки - PullRequest
0 голосов
/ 03 марта 2020

Я создаю приложение, похожее на рельсы. Опрос состоит из нескольких отдельных разделов (несколько просмотров), и в каждом разделе есть несколько вопросов. Пользователь ответит на этот вопрос (свободный текст), и в нижней части каждого разреза должна быть одна кнопка отправки, которая сохраняет все записи.

Модель для ответов пользователя:

user_answers(id:integer, user_answer:string, user_project_id:integer, question_id:integer).

У user_answers есть user_project_id, чтобы связать его с созданным проектом, и question_id для ответа. Таким образом, ответы позже могут быть напрямую связаны с нужным пользовательским проектом и соответствующим вопросом.

Как лучше всего сохранять несколько записей / form_for: user_answers с одной кнопкой отправки в конце страницы?

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

  2. Sidekiq может использоваться для асинхронного выполнения заданий в фоновом режиме.

Возможно, есть и другие, более простые как это сделать?

Заранее спасибо!

1 Ответ

0 голосов
/ 31 марта 2020

Я действительно обнаружил, что оба не применимы, и ответ на мой вопрос был рендеринг на стороне сервера с fields_for. Прежде чем объяснить fields_for, я хочу ответить, почему мои стратегии сверху не актуальны.

  1. Отправка двух форм с помощью одной кнопки работает, но делает все клиент- сторона. Это означает, что он работал на моей локальной машине, но как только я развернул приложение на heroku и попробовал его, javascript не сохранит все записи, потому что браузер завершит работу JS после первой (или первых нескольких ) submit() actions.

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

Поэтому мне нужно было найти способ обработки записей на стороне сервера, а это fields_for: https://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for.

Позволяет сохранить несколько вложенных объектов, поместив их в "parent" -form_for.

Вот хороший учебник, чтобы получить Внешний вид: https://www.youtube.com/watch?v=PYYwjTlcoa4

В моем случае я создал «оболочку» form_for в качестве контейнера вокруг fields_for. Fields_for в моем коде были сгенерированы динамически в соответствии с количеством вопросов в базе данных. Отправив оболочку form_for, я смог одним щелчком мыши обработать все поля_для ответов на серверную часть опроса.

...