There's an echo in my head

日々のメモ。

RailsのルーティングでデフォルトのMIMEタイプを指定する

RailsアプリケーションにたとえばGET /fooってリクエストを投げると、ActionDispatchあたりでGET /foo.htmlとして解釈してコントローラに処理が渡る。GET /foo.jsonみたいに拡張子がついていれば補完されずに処理が渡る。

でもAPIサーバを作ってる時はデフォルトで.jsonで補完してくれるほうが嬉しい。*1

そんなときはroutes.rbでdefaultsオプションを指定する。

post "/foo" => "foo#index", defaults: { format: "json" }
resources :foos, defaults: { format: "json" }
match 'foos/:id' => 'foos#show', defaults: { format: "json" }

namespaceでも効くのかな。試してない。

@satococoaさんありがたやー。

参考

追記

namespaceでも有効だった。

*1:そんな曖昧でいいのかというのはある

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。