3

假设我有一个带有两个模型的 Rails 应用程序PostComment. 一个帖子has_many评论和一个评论belongs_to一个帖子。
如何覆盖操作中的respond_to函数show以获得包含属性和对象Post数组的JSON 响应?Comment

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

4 回答 4

4

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

to_json

下面的代码应该可以工作。

 format.json { render json: @post.to_json(:include => :comments) }
于 2012-04-17T05:45:12.133 回答
2

Try using active_model_serializers for json serialization. It is easy to include associated objects and also separates things by having a different file for serialization.

Example:

class PostSerializer < ApplicationSerializer
    attributes :id, :title, :body
    has_many :comments
end
于 2012-04-17T04:28:24.760 回答
2

You can override to_json in model or you can use Jbuilder or rabl.

于 2012-04-17T04:31:01.927 回答
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/

于 2012-04-17T06:05:47.693 回答