繁体   English   中英

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

[英]Render status and data JSON response with active model serializer

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

我想以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关联)

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

你可以这样做:

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

试试这个

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

如果上面的剂量工作试试这个

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

也许你可以试着这样渲染:

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

更新:

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

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

在这里我假设job模型有users

  1. 将attr_accessor添加到模型类中

    class Job <ApplicationRecord
    attr_accessor:状态

    结束

2.然后将相同的属性添加到您的serilizer

 class JobSerializer < ActiveModel::Serializer
  attributes :id, :name, :address, :email,:status
  has_one :branch
 end

3.完成在控制器中添加这样的代码

@ job.status ='success'渲染json:@job,状态:200

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM