ruby on rails simple_form_ для поста на условно

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

у меня есть Test модель, с вложенными Questions, а также Question_responsesи у меня есть форма (используя simple_form_for) где пользователь выбирает ответы на вопросы теста. Это все работает нормально, но я хотел бы добавить Flag особенность, если тестируемый считает вопрос плохим. Прямо сейчас я использую link_to способ принять пользователя к flag действия контроллера, которые позволяют им создать флаг, и я временно удерживаю переменную test id, чтобы вернуть их в тест. Это все работает.

Однако, как можно видеть, я не сохраняю ход теста до того, как пользователь отправится на создание флага - так что если вы прошли половину теста и отметили вопрос, вы потеряете его. У меня есть идея, но я не уверен, что она может работать с simple_form:

Я бы опубликовал данные для некоторых других действий в рамках tests_controller, сохранить его, перенаправить на создание flag, а затем перенаправить обратно к тесту (в методе редактирования или что-то в этом роде) и позволить пользователю завершить тест. Это должно работать, но как мне получить представление с формой для отправки тестовых данных на какой-либо другой URL, кроме того, который указан simple_form_for @test, url: в верхней части формы? Есть ли способ условно опубликовать данные на другой URL в зависимости от того, где пользователь нажал, или переопределить :submit протокол для простого объекта кнопки формы? Я действительно не уверен, но я чувствую, что кто-то должен был сделать что-то подобное раньше.

1 ответ

Решение

Если кто-то еще не знаком с рельсами и пытается решить подобную проблему, вот что я сделал.

Во-первых, я обнаружил, что simple_form_for предназначен для публикации по одному URL-адресу, который вы указываете в аргументах функции simple_form_for. Однако вы можете условно изменить URL-адрес, на который отправляется форма, выполнив некоторую логику с URL-адресом, прежде чем вызывать функцию simple_form_for (см. Этот пост).

Но в моем случае я хотел разместить на разных URL-адресах, в зависимости от того, какая кнопка "отправить" в форме была нажата. Однако, как я сказал выше, эта функциональность просто не встроена в simple_form. Теоретически, я думаю, что было бы возможно иметь функцию javascript, которая изменила бы html-данные в форме и обновила бы URL, который публикует форма, если пользователь наводит курсор на кнопку или что-то, но это, вероятно, излишне сложно, если вы очень знакомы с JS (в отличие от меня). Суть в том, что есть более простой способ.

Однако вы можете изменить параметры, связанные с кнопкой отправки формы (см. Этот пост). Итак, что я сделал, и что я бы посоветовал другим сделать, это изменить параметры, связанные с определенной кнопкой в ​​вашей форме, а затем применить логику по мере необходимости в действии контроллера, на которое отправляется форма.

В моем случае я создал две кнопки в форме - кнопку, которая будет отправлять тестовые данные обычным способом, и кнопку для отправки теста, где пользователь перенаправляется на флаг создания. Прежде чем перенаправить их, я сохраняю все данные формы, которые уже были введены (внутри действия tests_controller). Затем пользователь перенаправляется на действия контроллера флага, и он может создать флаг в типичной манере рельсов. После того, как флаг был создан, я перенаправляю их обратно в тест, но на этот раз в пути редактирования для теста. Данные для теста перезагружаются, и пользователь может продолжить создавать тест.

Если кто-то захочет увидеть код того, как я это сделал, сообщите мне об этом в разделе комментариев, и я отредактирую этот ответ!

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