我正在使用活动模型序列化器。
我想以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关联)
有没有一种简单的方法可以做到这一点,我错过了?
答案 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