2

2 つのレール ルーティング機能 (デフォルト パラメータとパラメータ マッチング) の組み合わせに問題があります。それぞれを個別に解決するのは簡単ですが、組み合わせると、結果は私が求めているものとはまったく異なります.

ルール:

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

私が欲しいもの:

  1. formatパラメータはオプションです
  2. noformatが含まれている場合、デフォルトのフォーマットはjson
  3. formatが含まれている場合はxml、それがjson
  4. など、サポートされていないformatものが渡された場合html、このルート ルールは一致しません。

私が得ているもの:

  1. formatパラメータはオプションです
  2. noformatが含まれている場合、デフォルトのフォーマットはjson
  3. formatが含まれている場合はxml、それがjson
  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 に答える