使用活动模型序列化程序渲染状态和数据JSON响应

时间:2014-10-22 07:40:13

标签: ruby-on-rails json active-model-serializers

我正在使用活动模型序列化器。

我想以JSON格式呈现'status'和'data',例如

{"status":"success","data":[{"id":1,"content":xxx"}]}

我已经能够使用rails控制器中的以下代码生成'数据':

@jobs = Job.all
render json: @jobs

如何呈现“状态”和“数据”?我试过了:

@jobs = Job.all
render :json => { :status => :success, :data => @jobs }

这不能识别我的JobSerializer,因此呈现JSON输出,但不是我的JobSerializer中指定的属性和关联。

我也试过了:

@jobs = Job.all
render :json => { :status => :success, :data => ActiveModel::ArraySerializer.new(@jobs, each_serializer: JobSerializer) }

这似乎有效,即使用我的JobSerializer中的特定属性呈现JSON响应,但不识别或呈现JobSerializer中的关联(即has_many关联)

有没有一种简单的方法可以做到这一点,我错过了?

4 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

render :json => {
    status: "success",
    data: ContentSerializer.new( contents ).attributes
}

答案 1 :(得分:1)

试试这个

@jobs = Job.all
render json: @jobs, status: 200

如果以上不起作用,试试这个

@jobs = Job.all
render json: @jobs, status: 200, serializer: JobSerializer

答案 2 :(得分:0)

也许你可以尝试以这种方式渲染:

@jobs = Job.all
render :json => { :status => :success, :data => @jobs.to_json }

<强>更新

如果你想渲染和相关的对象,这应该是这样的:

render :json => { :status => :success, :data => @jobs.to_json(:include => :users) }

这里我假设job模型有users

答案 3 :(得分:0)

@jobs = Job.all render :json => { :status => :success, :data => (ActiveModel::ArraySerializer.new(@jobs, each_serializer: JobSerializer))

要使has_many关联起作用,需要在模型和序列化程序中定义关联

class JobSerializer < ActiveModel::Serializer
has_many :association
end

class Section < ApplicationRecord
has_many :association
end