我有一个问题,结合2轨道路由功能(默认参数和参数匹配)。每个问题单独解决起来都很容易,但把它们结合起来,结果就不是我想要的了。
规则:get "/foobars(.:format)" => "foobars#index", :defaults => {:format => :json}, :format => /(xml|json)/
我想要的:
-
format
参数是可选的 - 如果不包含
format
,则默认格式为json
- 如果包含
format
,确保只有xml
或json
- 如果传递了不支持的
format
,例如html
,则不匹配此路由规则。
我得到的是:
-
format
参数是可选的 - 如果不包含
format
,则默认格式为json
- 如果包含
format
,确保只有xml
或json
- 如果传递的是不支持的
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)/}