2010-01-25 28 views
0

Voici mon code Ruby:Comment changer le format de mon paramètre?

 <%form_tag orders_path, :method => 'get' do%> 
     From           
     <%= date_select ("from", "", :start_year => 2010, :order => [:day, :month, :year])%> 
     To            
     <%= date_select ("to", "", :start_year => 2010, :order => [:day, :month, :year])%> 
     <%= submit_tag "Search", :name => nil%> 
     <%end%> 

Après avoir choisi une date, j'ai ce résultat:

http://localhost:3000/orders?from[%283i%29]=25&from[%282i%29]=1&from[%281i%29]=2010&to[%283i%29]=25&to[%282i%29]=1&to[%281i%29]=2010

Je veux que le paramètre devient un format facile à lire comme :

http://localhost:3000/orders?from=25/01/2010&to=25/01/2010 

Que dois-je faire?

Répondre

1

Ceci n'est pas du tout spécifique aux Rails, puisque le format de transmission des paramètres par les formulaires HTML est une norme définie. (?input_name=input_value&next_input_name=next_input_value). Puisque vous voulez avoir des sélections séparées pour Jour/Mois/Année, j'ai peur qu'il n'y ait pas d'autre moyen que d'utiliser JS avant de soumettre le formulaire.

0

Nils Riedemann a raison, ce n'est pas nécessairement un problème de rails autant que c'est un problème de formulaires HTML.

Vous pouvez utiliser des champs de formulaire cachés pour faire ce que vous voulez. Créez deux champs de texte cachés (un pour «de» et un pour «à»). Écrire une fonction Javascript qui prend les valeurs des champs de sélection mois/jour/année, construit une chaîne comme "25/01/2010" hors de leurs valeurs, et stocke cette chaîne comme le contenu du champ caché. Câblez la fonction Javascript pour exécuter chaque fois que l'un des champs de sélection de date est modifié. Maintenant, si l'opération 'submit' de votre formulaire ne soumet que les deux champs cachés, vous pouvez obtenir une URL plus belle comme vous le souhaitez.

Vous pouvez également être en mesure d'utiliser une URL comme:

http://localhost:3000/orders/25-01-2010/25-04-2010 

en tirant parti de la capacité des rails à re-write URLs. Voir spécifiquement la section "Pretty URLs".