Как включить дочерние ассоциации при сериализации в json? - PullRequest
0 голосов
/ 14 октября 2018

Перед использованием fast_jsonapi gem я делал это:

render json: school.to_json(include: [classroom: [:students]])

Мой SchoolSerializer выглядит следующим образом:

class SchoolSerializer
  include FastJsonapi::ObjectSerializer
  attributes :name, :description, :classroom
end

Как бы я включил учеников в результат JSON?

Кроме того, ассоциация класса включает, но отображает все свойства, есть ли способ сопоставить свойство класса с ClassroomSerializer?

class School < ApplicationRecord
  belongs_to :classroom
end

class Classroom < ApplicationRecord
  has_many :students
end

1 Ответ

0 голосов
/ 14 октября 2018
class SchoolSerializer
  include FastJsonapi::ObjectSerializer
  attributes :name, :description

  belongs_to :classroom
end

# /serializers/classroom_serializer.rb
class ClassroomSerializer
  include FastJsonapi::ObjectSerializer
  attributes :.... #attributes you want to show
end

Также вы можете добавить дополнительную ассоциацию к вашей модели школы, чтобы получить доступ к ученикам.как это

has_many :students, through: :classroom

и затем включите его в сериализатор школы напрямую.

Обновление : также обратите внимание, что вы можете напрямую указать нужный класс сериализатора.(если вы хотите использовать класс с другим именем из модели в качестве примера).

class SchoolSerializer
  include FastJsonapi::ObjectSerializer
  attributes :name, :description

  belongs_to :classroom, serializer: ClassroomSerializer
end
...