У меня есть некоторые данные в древовидной/иерархической модели для (восхождения) областей, так что они связаны через родительские и дочерние области.
Используя адаптер JSON API с моим Active Model Serializer,
class AreaSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :location, :slug
belongs_to :user
belongs_to :parent
has_many :children
end
Я могу вернуть область с родителем и дочерними элементами, включенными в мой контроллер:
class AreasController < ApplicationController
...
def show
area = Area.friendly.find(params[:id])
render json: area, include: [:children, :parent]
end
end
и вернуть именно то, что ожидалось: ответ JSON с данными Area, объект отношений, который идентифицирует user_id/type, parent_id/type, children_id/type. Все это отправляется на мутацию в хранилище Vuex для Vue SPA.
Проблема в том, что в included
элементе ответа все перепутано. В конечном итоге я хочу легко получить доступ к parent "slug"
и хранить массив children
отдельно.
Да, в ответе есть дочерние и родительские элементы, но все они одного и того же type: "areas"
и все вместе в одном массиве. Должен быть какой-то разумный способ проанализировать эти данные в javascript, чтобы я мог сравнить parent: data { id: "5" }
в элементе relationships
ответа с id
одного из элементов массива included
Я понимаю, что могу сделать это проще, если откажусь от спецификации JSON API и просто использую сериализатор по умолчанию, который даст мне атрибуты parent
и children
непосредственно в данных ответа.
Есть ли способ разобрать эти связанные объекты в javascript на четко определенные собственные массивы/объекты? Может быть, мне следует отказаться от спецификаций JSON API для этого и просто контролировать вывод данных непосредственно с сервера?
Надеюсь это имеет смысл; кто-то, должно быть, сталкивался с этим раньше, но я не мог найти никаких примеров...