Hatena::ブログ(Diary)

130単位

2012-06-10

Rails format.anyのContent-Typeを指定する

例えばAPIとかのレスポンスで、とにかくJSONのみを返すようにしたいとします。

class Api::ProductsController < ApplicationController
  def index
    respond_to do |format|
      format.any { render json: @products }
    end
  end
end

respond_toとformat.anyを組み合わせることで、/api/products.json とかしなくても、/api/products でJSONが返るようになります。

ただ、format.anyだとレスポンスヘッダのContent-Typeが常にtext/htmlになってしまうみたいです。

これをJSONの適切なヘッダapplication/jsonに変えたいとき。

    respond_to do |format|
      response.headers['Content-Type'] = 'application/json; charset=utf-8'
      format.any { render json: @products }
    end

response.headers['Content-Type'] で指定するといいです。

追記

[twitter:@naoty_k]さんに別の方法を教えてもらいました。

こちらのほうがよりRails Wayですね。ありがとうございます!