Многошаговая форма с использованием запросов GET - PullRequest
0 голосов
/ 15 октября 2010

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

  1. Показать доступные процедуры, выберите один
  2. Показать доступные даты (на заднем плане есть бизнес-логика)
  3. Выберите время

URL будет проходить через следующие состояния

  1. site.com / заказы / новый
  2. site.com / bookings / new / [id | name_of_treatment] (под этим я имею в виду или поле идентификатора, или название процедуры)
  3. site.com / заказы / новый / [идентификатор | name_of_treatment] / 2010-12-12 /

Итак, мой маршрут выглядит так:

map.connect 'bookings/new/:massage_type/:date', :controller => :bookings, :action => :new

тип массажа является синонимом идентификатора treatment_id.

Итак, мой form_tag выглядит так:

<% form_tag( {:action => "new"}, :method => "get" ) do %>

Проблема в том, что я хочу, чтобы она просто возвращала мне URL site.com/bookings/new/[id|name_of_treatment]/, но вместо этого он возвращает следующий URL:

http://localhost:3000/bookings/new?massage_type[treatment_id]=1&commit=actionnew

Не думаю, что кто-нибудь знает?

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Формы, использующие GET, добавляют входные значения в качестве параметров запроса. Невозможно отправить форму на другой URL-адрес, где входные значения являются частью URL-адреса - это просто не поддерживается стандартом HTML.

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

Однако я не понимаю, почему форма должна GET указывать этот конкретный URL. Требуется ли, чтобы эти URL-адреса могли создаваться пользователем вручную вместо использования формы?

Если такого требования нет, я бы посоветовал использовать стандартную форму POST для http://localhost:3000/bookings/new и при необходимости изменить форму в ответе на основе параметров в теле POST.

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

0 голосов
/ 15 октября 2010

По определению, результат запроса GET будет иметь строку запроса (?param1=value1&param2=value2&...) в своем URL. Чтобы избавиться от них, вам придется либо начать использовать POST, либо сразу же перенаправить на нужный URL-адрес после получения запроса GET.

Мне скорее нравится подход перенаправления, потому что он не показывает того запутанного / раздражающего сообщения о повторной отправке данных POST, когда пользователь обновляет свой браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...