[英]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
将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.