Я пытаюсь использовать пользовательские сериализаторы для отношений в сериализаторе и адаптере json_api. Однако отношения не сериализованы правильно (или, лучше, не отображаются вообще/сериализованы).Active Model Serializer не работает с адаптером json_api
PostController.rb
def index
render json: Post.all, each_serializer: Serializers::PostSerializer
end
Serializer
module Api
module V1
module Serializers
class PostSerializer < ActiveModel::Serializer
attributes :title, :id
belongs_to :author, serializer: UserSerializer
has_many :post_sections, serializer: PostSectionSerializer
end
end
end
end
JSON выход:
{
"data": [
{
"attributes": {
"title": "Test Title"
},
"id": "1",
"relationships": {
"author": {
"data": {
"id": "1",
"type": "users"
}
},
"post_sections": {
"data": [
{
"id": "1",
"type": "post_sections"
}
]
}
},
"type": "posts"
}
]
}
Как вы можете см., отношения не выполняются, что происходит , только если я задаю собственный сериализатор для отношений !!
Если я что-то вроде этого:
module Api
module V1
module Serializers
class PostSerializer < ActiveModel::Serializer
attributes :title, :id
belongs_to :author # no custom serializer!
has_many :post_sections # no custom serializer!
end
end
end
end
Взаимосвязи показаны правильно, но не с помощью пользовательского сериалайзер ... Что вопрос здесь?
EDIT
Согласно json API 1.0 Format, что я получаю обратно так называемый resource identifier object
.
следующих основных данных представляет собой один объект идентификатор ресурса, который ссылается на тот же ресурс:
{ "данные": { "типа": "статьи", "идентификатор": "1" }}
Есть ли способ предотвратить получение объектов идентификатора ресурса и вместо этого получить фактические данные?
@ CHRIS-Петерс или Бруно: Есть ли способ, т o включать ассоциации по умолчанию в сериализатор без необходимости делать это в контроллере в каждом месте, где мы называем рендеринг? Есть ли опция включения, которую мы могли бы добавить в has_one/has_many ассоциации в сериализаторе? – geoboy
@geoboy Похоже, что сегодня у кого-то была такая же мысль: https://github.com/rails-api/active_model_serializers/issues/1333 Проблема указывает на то, что такого рода вещи еще не доступны. –