2010-10-15 7 views
0

Nous avons l'exigence inhabituelle d'un formulaire multi-étapes via les requêtes GET. Ainsi, au lieu de POST les formulaires, nous utilisons des requêtes GET pour passer de nouveaux paramètres à la requête. Donc, l'idée de base est qu'il y a un traitement, et une date est passée à la requête. Un formulaire en trois étapes si vous voulez.Formulaire multi-étapes utilisant des requêtes GET

  1. Afficher les traitements disponibles, choisissez un
  2. Afficher les dates disponibles (il y a la logique métier en arrière-plan qui figure ces derniers dehors)
  3. Choisissez un temps

L'URL passera par les états suivants

  1. site.com/bookings/new
  2. s ite.com/bookings/new/[id|name_of_treatment] (par ceci, je veux dire qu'il pourrait soit par le champ ID ou le nom du traitement)
  3. site.com/bookings/new/[id|nom_de_traitement]/2010-12-12/

Alors, mon itinéraire ressemble à ceci:

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

massage_type est synonyme de treatment_id.

Alors mon form_tag ressemble à ceci:

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

Le problème que je vais avoir est que je veux juste me rendre l'URL site.com/bookings/new/[id|name_of_treatment]/ mais à la place il renvoie l'URL suivante:

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

Je suppose que personne ne le sait?

+1

Hors sujet: Les avantages sont-ils bons lors du codage du site Web pour un salon de massage? –

Répondre

1

Les formulaires utilisant GET ajoutent les valeurs d'entrée en tant que paramètres de requête. Il n'y a aucun moyen de publier le formulaire sur une URL différente, où les valeurs d'entrée font partie de l'URL à la place - ce n'est simplement pas pris en charge par le standard HTML.

Vous pouvez utiliser la réécriture d'URL pour remapper les URL entrantes de ce type sur celle que vous voulez, mais ce n'est pas vraiment une bonne solution, car cela entraînerait une seconde requête.

Cependant, ce que je ne comprends pas, c'est pourquoi le formulaire doit faire GET à cette URL spécifique. Est-ce une exigence que ces URL peuvent être construites par l'utilisateur manuellement, au lieu d'utiliser le formulaire?

S'il n'y a pas une telle exigence, je vous conseille d'utiliser formulaire standard POST pour http://localhost:3000/bookings/new et modifier la forme de la réponse en fonction des paramètres dans le corps POST, au besoin.

Mieux encore, écrivez Ajax qui mettrait à jour le formulaire selon le choix de l'utilisateur, sans soumettre de formulaire complet, jusqu'à ce que l'utilisateur ait fini tous les choix.

+0

C'est une forme en trois étapes, mais vous devriez être capable de sauter à n'importe quelle étape, parce qu'une autre page offre la possibilité d'aller directement à une seconde étape par exemple. – Kezzer

+0

L'autre page peut vous mettre dans le bon état en POSTANT les bons paramètres. La seule raison pour laquelle vous auriez besoin de ce format d'URL est si vous voulez permettre à l'utilisateur de le construire à la main (comme je l'ai déjà mentionné). –

+0

Eh bien, il serait POSSIBLE de POST à ​​partir des autres pages, je suppose. Je n'aime pas du tout les formes multi-étapes, mais nous voulions une solution accessible à l'aide de l'amélioration progressive, donc nous ne comptons pas entièrement sur javascript. Nous commençons fondamentalement à partir de zéro. Je suppose que je peux le poster, puis à partir des autres pages, je pourrais créer des tas de formulaires POST les variables nécessaires – Kezzer

0

Par définition, le résultat d'une requête GET aura une chaîne de requête (?param1=value1&param2=value2&...) dans son URL. Pour se débarrasser de ceux-ci, vous devrez soit commencer à utiliser POST ou immédiatement rediriger vers l'URL souhaitée lors de la réception d'une demande GET. J'aime plutôt l'approche de redirection parce qu'elle ne montre pas ce message déroutant/gênant de resoumettre des données POST lorsque l'utilisateur actualise son navigateur.

+0

Une option à laquelle je pensais était la redirection instantanée, ce qui est parfaitement viable je suppose – Kezzer

Questions connexes