Я использую драгоценный камень active_model_serializers
.Активные модели Сериализаторы has_many association
сериализаторы:
class ProjectGroupSerializer < ActiveModel::Serializer
attributes :id, :name, :description
has_many :projects
end
class ProjectSerializer < ActiveModel::Serializer
attributes :id, :name, :description
belongs_to :project_group
end
Контроллер:
def index
@project_groups = ProjectGroup.all.includes(:projects)
render json: @project_groups, include: 'projects'
end
Я получаю следующий ответ :
{
"data": [
{
"id": "35",
"type": "project_groups",
"attributes": {
"name": "sdsdf",
"description": null
},
"relationships": {
"projects": {
"data": [
{
"id": "1",
"type": "projects"
},
{
"id": "2",
"type": "projects"
}
]
}
}
}
],
"included": [
{
"id": "1",
"type": "projects",
"attributes": {
"name": "qweqwe",
"description": null,
"project_group_id": 1
},
"relationships": {
"project_group": {
"data": {
"id": "1",
"type": "project_groups"
}
}
}
},
{
"id": "2",
"type": "projects",
"attributes": {
"name": "ewe",
"description": null,
"project_group_id": 2
},
"relationships": {
"project_group": {
"data": {
"id": "2",
"type": "project_groups"
}
}
}
}
]
}
Я хочу, чтобы получить ассоциации внутри отношенийобъект, не вне (в included
array
), как в ответ, что я получаю. Является ли это возможным?
PS1: BELONGS_TO ассоциация работает отлично, ассоциация приходит внутри отношенийобъекта, как и в документации.
PS2: Я хочу сделать это, потому что у меня есть 3 или 4 ассоциации, и я хочу получить к ним доступ от каждого объекта. Таким образом, я получаю ответ, будет настоящим беспорядком.
Подобно тому, как в сторону: это было бы недействительным JSON: API, так что, вероятно, будет что-то легко поддерживать/поддержки нет. Предполагается, что ключ отношений содержит [объекты идентификатора ресурса] (http://jsonapi.org/format/#document-resource-identifier-objects). Клиент JSON: API должен анализировать их для вас, если вы сохраните их как действительные JSON: API (но я согласен, что это немного громоздко разобрать, если вы пишете собственный клиент). – mltsy