2014-10-22 2 views
1

Я использую активный сериализатор модели.Render статус и данные Ответ JSON с активным сериализатором модели

Я хочу отображать как «статус», так и «данные» в формате JSON, например.

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

Я был в состоянии произвести «данные», используя следующий код в моем контроллере рельсов:

@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) } 

Это, кажется, работает, т.е. делает ответ JSON с нужными атрибутами speicified в моем JobSerializer, но не признает или оказывать ассоциации в моем JobSerializer (т.е. a has_many association)

Есть ли простой способ сделать это, что мне не хватает?

+0

определение функции send_data @ jobs.each сделать | Работа | job.data job.status конец делают что-то, JSON: @ jobs.as_json end' попробовать определение этого method..hope это помогает .. – Sontya

+0

К сожалению, не уверен, что это пытается достичь? что будет делать job.data и job.status на каждой задаче? – user3711600

ответ

0

может быть, вы можете попробовать, чтобы сделать на этом пути:

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

UPDATE:

, если вы хотите сделать, и связанных с ними объектов, это должно выглядеть так:

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

здесь я предположил, что модель job имеет users

+0

не работает к сожалению. выводит ответ JSON, но не распознает атрибуты или ассоциации в JobSerialize. – user3711600

+0

Я обновил свой ответ в отношении «ассоциаций» –

+0

Да, но это просто загрузка вручную в ассоциации - @jobs все еще не распознает атрибуты и ассоциации, которые я уже указал в JobSerializer. – user3711600

0

Попробуйте

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

если выше доцент работы попробовать это один

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

Вы можете сделать что-то вроде:

render :json => { 
    status: "success", 
    data: ContentSerializer.new(contents).attributes 
} 
0
  1. Добавить attr_accessor в вашей модели класса

    класс Работа < ApplicationRecord
    attr_accessor: Статус

    конец

2.Then добавить тот же атрибут к вашему serilizer

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

3.Done добавить код, как это в вашем контроллере

@ job.статус = 'Успех' визуализации: @job JSON, состояние: 200

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