dan*_*dan 21 routes ruby-on-rails-3
我有一个Rails路由,它将股票代码符号作为:id
feeds/AMZN 将返回亚马逊的页面feeds/AMZN.csv 将返回相同数据的CSV表示形式.但我还需要容纳像VIA.B(维亚康姆)这样的股票,这样这两条路线都可以工作:
feeds/VIA.B (html)
feeds/VIA.B.csv (csv)
Run Code Online (Sandbox Code Playgroud)
这可能吗?我该如何设置路由?
Dyl*_*kow 32
我最近在修补RubyGems API时遇到了这个问题(尝试访问flickr.rb使用API(/api/v1/gems/flickr.rb.json)不起作用).
诀窍是为路由提供regexp来处理:id参数,然后指定有效:format.请记住,正则:id表达式需要"懒惰"(必须以问号结尾),否则它会吃掉.csv并假设它是id的一部分.以下示例将允许带有句点的id的JSON,CSV,XML和YAML格式:
resources :feeds, :id => /[A-Za-z0-9\.]+?/, :format => /json|csv|xml|yaml/
Run Code Online (Sandbox Code Playgroud)
老问题,但我找到了一种更简单的方法,适用于嵌套路由(我在Rails 3.2.4上).这种方式允许所有字符(包括点)而不是接受的答案,这使您可以指定允许的字符.
resources :feeds, :id => /([^\/])+?/
Run Code Online (Sandbox Code Playgroud)
请注意,我发现了一些其他建议(例如:http://coding-journal.com/rails-3-routing-parameters-with-dots/),其中包括:
resources :feeds, :id => /.*/
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,这对我来说不适用于嵌套路线.