slii
@slii

Как правильно вызвать одну форму из другой?

На сайте с бэкендом на ruby on rails нужно, чтобы по заполнению одной формы со стандартной валидацией появлялось всплывающее окно, с другой формой, где пользователю нужно ввести код из смс.

Подскажите, как лучше это реализовать?

Пока в мыслях только перехватывать submit первой формы через js и вызывать вторую при условии, правильно заполненных данных из первой.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 3
mrusklon
@mrusklon
Не получается? Яростно гугли!
через ajax сделать отправку формы , по успешному выполнению формы открывать вторую
Ответ написан
Комментировать
@nvdfxx
Senior Pomidor developer
У вас скорее всего еще дополнительно правильность ввода на сервере проверяется, можно сокетами воспользоваться, чтобы когда данные первой формы прошли валидацию на сервере, на клиент заэммитилось событие для открытия второй формы
Ответ написан
Комментировать
IvanTheCrazy
@IvanTheCrazy
Ну смотрите. У вас Rails, а значит у вас есть:

1. Ajax форма без написания какого-то дополнительного JS. Грубо говоря добавляете remote: true, типа так:
= form_for @some_model, remote: true do |f|

2. Форматы ответа. Вот эта штука уже интереснее. Вы наверняка видели URL вида /posts.json в Rails. Мало кто почему-то знает что можно сделать URL вида /posts.js, такой запрос должен вернуть JavaScript, который будет немедленно выполнен. Например так:

= form_for model_path(@some_model, format: :js), remote: true do |f|

Соответственно для метода create в контроллере у вас будет вьюшка, например some_model/create.js.erb (да, туда можно вставлять ERB) вида например такого:

<% if @some_model.errors.any? %>
Тут JS который что-то делает в случае ошибки
<% else %>
Тут JS который показывает окошко для SMS
<% end %>

Эта штука неплохо разобрана в Agile development with Rails
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект