如何将非REST URL映射到REST URL?

时间:2010-05-18 09:42:22

标签: ruby-on-rails rest routing

我有一个小型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中制作合适的路线?

3 个答案:

答案 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'默认路由,然后有一个特殊的重定向控制器,它将查看查询参数(因为在 的控制器中可以访问它)并相应地重定向。