2012-04-17 25 views
3

2つのモデルPostCommentを持つRailsアプリケーションがあるとします。投稿has_manyコメントとコメントbelongs_to投稿。
Postプロパティとそれに含まれるCommentオブジェクトの配列の両方を含むJSON応答を取得するには、showアクションでrespond_to関数をオーバーライドするにはどうすればよいですか?RailsからネストされたJSON出力を取得する

現在はバニラRailsのデフォルトである:

# posts_controller.rb 
def show 
    @post = current_user.posts.find(params[:id]) 

    respond_to do |format| 
    format.html # show.html.erb 
    format.json { render json: @post } 
    end 
end 
+0

あなたのレールのバージョンは何ですか? – Vik

+0

私のレールのバージョンは3.2です –

答えて

2

は、JSONのシリアライズ用のactive_model_serializersを使用してみてください。関連するオブジェクトを組み込むのは簡単で、シリアル化のために別のファイルを持つことで物を分けることもできます。

例:

class PostSerializer < ApplicationSerializer 
    attributes :id, :title, :body 
    has_many :comments 
end 
2

あなたは、モデル内のto_jsonをオーバーライドすることができます。また、Jbuilderrablを使用することができます。

+0

[jbuilder](http://github.com/rails/jbuilder)は行く方法です。 – sorens

3

これは、アクティブレコードのシリアル化方法を使用して行うことができます。

to_json 

以下のコードが有効です。

format.json { render json: @post.to_json(:include => :comments) } 
1

Railsは対応するための最良の方法を提供しています

は、コントローラの上にrespond_toを定義します。以下のような:詳細情報については

class YourController < ApplicationController 
    respond_to :xml, :json 

    def show 
    @post = current_user.posts.find(params[:id]) 
    respond_with (@post) 
    end 
end 

は上を見てみましょう:http://davidwparker.com/2010/03/09/api-in-rails-respond-to-and-respond-with/

関連する問題