2

我在组合 2 个导轨路由功能(默认参数和参数匹配)时遇到问题。每一个都很容易独立解决,但是当结合起来时,结果并不完全是我所追求的。

规则:

get "/foobars(.:format)" => "foobars#index", :defaults => {:format => :json}, :format => /(xml|json)/

我想要的是:

  1. format参数是可选的
  2. 如果没有format,则默认格式为json
  3. 如果format包含,请确保它只是xmljson
  4. 如果format通过了不支持的,例如html,则此路由规则不应匹配。

我得到了什么:

  1. format参数是可选的
  2. 如果没有format,则默认格式为json
  3. 如果format包含,请确保它只是xmljson
  4. 如果format传递了不支持的值,例如baz,则此路由规则匹配并将格式设置为JSON

不同点#4是我要解决的问题。换句话说,我在这之后:

GET /foobars      => "foobars#index"  with format `json`
GET /foobars.json => "foobars#index"  with format `json`
GET /foobars.xml  => "foobars#index"  with format `xml`
GET /foobars.baz  => "something#else" handled by another route rule lower down

我在这里做错了什么?

4

1 回答 1

4

您是否尝试过使最后一部分成为约束?

get "/foobars(.:format)" => "foobars#index", :defaults => {:format => :json}, :constraints => {:format => /(xml|json)/}
于 2013-01-04T15:53:52.367 回答