2012-04-17 88 views
3

假设我有一个Rails应用程序,其中有两个模型PostComment。一篇文章has_many评论和评论belongs_to一篇文章。
如何覆盖show操作中的respond_to函数以获取包含Post属性和其具有Comment对象的数组的JSON响应?从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 2012-04-17 05:59:19

+0

我的rails版本是3.2 – 2012-04-17 06:01:43

回答

2

尝试使用active_model_serializers的JSON序列化。包含关联对象很容易,并且通过为序列化创建不同的文件来分离事物。

例子:

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

您可以覆盖模型to_json或者您可以使用Jbuilderrabl

+0

[jbuilder](http://github.com/rails/jbuilder)是要走的路。 – sorens 2012-10-11 14:54:55

3

您可以使用Active Record序列化方法来实现这一点。

to_json 

下面的代码应该工作。

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