Как использовать CollectionSerializer в FastJson API? - PullRequest
0 голосов
/ 04 ноября 2019

Я обновляю код API до FastJson (https://github.com/Netflix/fast_jsonapi) там, где я работаю. «Старый» код использует ActiveModel и имеет ActiveModel::Serializer::CollectionSerializer.new. Я понятия не имею, как «перевести» этот код вFastJson API.

Я уже искал документацию FastJson о сериализации коллекций (https://github.com/Netflix/fast_jsonapi#collection-serialization),, но я не понял пример.

class API::Messages::MessagesSerializer < ActiveModel::Serializer
  attributes :id, :name, :description

  attribute :chats do
    ActiveModel::Serializer::CollectionSerializer.new(
      object.user_chats, serializer: API:Messages::ChatUserSerializer
    )
  end
end 

1 Ответ

0 голосов
/ 04 ноября 2019

Когда коллекция будет передана в сериализатор, она будет обрабатывать эту коллекцию совершенно без необходимости настраивать что-либо дополнительное. Ниже перечислены сериализаторы

class API::Messages::MessagesSerializer
  include FastJsonapi::ObjectSerializer
  attributes :id, :name, :description

  attributes :chats do |message|
    API::Messages::ChatsSerializer.new(message. user_chats)
  end
end

class API::Messages::ChatsSerializer
  include FastJsonapi::ObjectSerializer
  attributes ... # add attribute/logic as you want for single chat object
end

И ваш контроллер будет выглядеть примерно так

def show
  render json: API::Messages::MessagesSerializer.new(@message).serialized_json, status: :ok
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...