我有一个小型rails应用程序,它具有默认的scaffold生成的路由,例如。 /stadia/1.xml
。但是,我必须支持无法正确构建此类URL的旧版客户端应用程序。我需要做的是以以下形式映射URL:
/stadia?id=1?format=xml
至/stadia/1.xml
甚至可能是:
/myApp?model=<model_name>?id=<id>?format=xml
至/<model_name/<id>.xml
是否可以在Rails中制作合适的路线?
答案 0 :(得分:1)
我对此没有好的答案。我要做的是将旧网址的第一部分更改为/stadia_legacy
,或者更改RESTful路由的网址的第一部分。
然后你可以在路线中映射:
map.stadia_legacy :stadia_legacy, :controller => 'stadias', :action => 'please_redirect_me'
然后在行动please_redirect_me
中的stadias控制器中,您可以检查所有参数(它们可以在params
哈希:params[:id]
,params[:format]
等中使用)并重定向到正确的网址。或者您可以手动编写所有路线以纠正控制器和操作。
答案 1 :(得分:0)
如果你在apache中做一些url重写怎么办?
答案 2 :(得分:0)
I had a similar question。到目前为止还没有答案,所以看来routes.rb配置并没有提供一种简单的方法(基于查询参数的路由),实际上我觉得很惊讶。
所以一个丑陋的解决方法是拥有一个'myApp'默认路由,然后有一个特殊的重定向控制器,它将查看查询参数(因为在 的控制器中可以访问它)并相应地重定向。