Rails 3路由:默认格式和限制格式



我有一个问题,结合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

我在这里做错了什么?

您是否尝试过将最后一节设置为约束?

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

相关内容

  • 没有找到相关文章

最新更新