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). Затем пользователь перенаправляется на действия контроллера флага, и он может создать флаг в типичной манере рельсов. После того, как флаг был создан, я перенаправляю их обратно в тест, но на этот раз в пути редактирования для теста. Данные для теста перезагружаются, и пользователь может продолжить создавать тест.
Если кто-то захочет увидеть код того, как я это сделал, сообщите мне об этом в разделе комментариев, и я отредактирую этот ответ!