どうぞ:
オブジェクトで to_json が呼び出されるたびに、as_json が呼び出されてデータ構造が作成され、そのハッシュが ActiveSupport::json.encode を使用して JSON 文字列としてエンコードされます。これは、オブジェクト、数値、日付、文字列などのすべてのタイプで発生します (active_support/json を参照)。
ActiveRecord オブジェクトも同じように動作します。モデルのすべての属性を含むハッシュを作成するデフォルトの as_json 実装があります。モデルで as_json をオーバーライドして、必要な JSON 構造を作成する必要があります。as_json は、古い to_json と同様に、装飾的に含める属性とメソッドを指定できるオプション ハッシュを使用します。
def as_json(options={})
super(:only => [:email, :avatar], :include =>[:addresses])
end
1 つのモデルを表示するためのコントローラー コードは、常に次のようになります。
render :json => @user
通常とは違うことをしなければならない場合は、オプションを渡して as_json を呼び出します。
render :json => { :success => true,
:user => @user.as_json(:only => [:email]) }
この話の教訓は次のとおりです。コントローラーでは、to_json
直接呼び出すのではなく、render に呼び出しを任せてください。JSON 出力を微調整する必要がある場合as_json
は、モデルでオーバーライドするか、as_json
直接呼び出します。
すぐに使用できるようにコードを修正してください。as_json
に移行する際に心配することが 1 つ少なくなりますRails 3 or Ruby 1.9.3
。