2010-05-18 4 views
1

J'ai une application de petits rails qui a des routes générées par échafaudage par défaut, par exemple. /stadia/1.xml. Cependant, je dois prendre en charge l'application cliente héritée qui ne peut pas créer ces URL correctement. Ce que je dois faire est de la carte URL sous la forme:Comment mapper des URL non-REST vers des URL REST?

/stadia?id=1?format=xml-/stadia/1.xml

Ou encore quelque chose comme:

/myApp?model=<model_name>?id=<id>?format=xml-/<model_name/<id>.xml

Est-il possible de concevoir la route appropriée dans Rails?

Répondre

0

Que faire si vous faites une réécriture d'URL dans Apache?

+0

Une déclaration générale comme celle-ci n'aide pas beaucoup l'OP. Je serais utile de fournir au moins un exemple de la façon d'y parvenir. – dafmetal

+0

Parfois, les gens travaillent avec du vieux code existant, et ne peuvent pas faire face à "oh pourquoi n'avons-nous pas réécrit toute l'application, et toutes les URL dans notre application?" C'est une solution de contournement, mais c'est rapide et moche. – dzen

0

I had a similar question. Aucune réponse jusqu'à présent, il semble donc que routes.rb config n'offre pas un moyen facile de le faire (routage basé sur des paramètres de requête), ce que je trouve surprenant en fait.

donc une solution laide serait d'avoir une route par défaut « myApp », puis un contrôleur de redirigeant spécial qui examinerait les paramètres de requête (parce que dans les contrôleurs que vous faire ont accès à cela) et rediriger en conséquence.

1

Je n'ai pas de bonne réponse pour ça. Ce que je ferais est de changer la première partie de l'URL en /stadia_legacy pour les URLs héritées ou de changer la première partie des URL pour les routes RESTful.

Ensuite, vous pouvez carte dans les itinéraires:

map.stadia_legacy :stadia_legacy, :controller => 'stadias', :action => 'please_redirect_me' 

Ensuite, dans le contrôleur de stadias en action please_redirect_me vous pouvez vérifier tous les params (ils sont availble dans params hachage: params[:id], params[:format] etc.) et redirigez corriger url. Ou vous pouvez écrire manuellement toutes les routes pour corriger le contrôleur et l'action.