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

时间:2013-01-04 15:20:55

标签: ruby-on-rails ruby ruby-on-rails-3 routing format

我在组合2个路由路由功能时遇到问题(默认参数和参数匹配)。每个都很容易解决,但结合起来时,结果并不是我想要的。

规则:

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

我想要的是什么:

  1. format param是可选的
  2. 如果不包含format,则将格式默认为json
  3. 如果包含format,请确保其仅为xmljson
  4. 如果传递了不受支持的format,例如html,则此路由规则不应匹配。
  5. 我得到了什么:

    1. format param是可选的
    2. 如果不包含format,则将格式默认为json
    3. 如果包含format,请确保其仅为xmljson
    4. 如果传递了不受支持的format,例如baz,此路线规则会匹配并将格式设置为JSON
    5. #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
      

      我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

您是否尝试过将上一部分作为约束?

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