从Rails获取嵌套的JSON输出

时间:2012-04-17 04:14:33

标签: ruby-on-rails model-associations

假设我有一个包含两个模型PostComment的Rails应用。帖子has_many发表评论并发表评论belongs_to帖子 如何覆盖respond_to操作中的show函数,以获取包含Post属性和Comment对象数组的JSON响应?< / p>

目前它是vanilla 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

4 个答案:

答案 0 :(得分:4)

您可以使用Active Record序列化方法执行此操作。

to_json

下面的代码应该可以使用。

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

答案 1 :(得分:2)

尝试使用active_model_serializers进行json序列化。包含关联对象很容易,也可以通过使用不同的序列化文件来分隔。

示例:

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

答案 2 :(得分:2)

您可以在模型中覆盖to_json,也可以使用Jbuilderrabl

答案 3 :(得分: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/