假设我有一个包含两个模型Post
和Comment
的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
答案 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)
答案 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/