Исходя из моего понимания спецификации JSON: API (в частности, https://jsonapi.org/format/#document-resource-object-linkage), я смогу включить meta
членов для каждого члена отношения.
Мне удалось добавитьхэш meta
данных для самого объекта relationships
, но не один для каждого из отдельных отношений внутри.
class PlanSerializer < ApplicationSerializer
attributes :id, :name
has_many :features do
meta value: "x"
end
end
Я знаю, что могу использовать синтаксис блока для has_many
, и думаю, что этоспособ достижения этого. Но у меня это не работает. Вызов метода meta
в блоке добавляет мета-блок к объекту отношения features
, и мне нужно добавить один к каждой записи в этом массиве.
Мои вопросы:
Правильно ли я понял спецификацию? Должен ли быть в состоянии добавить объект meta
к каждому отношению?
Как бы я поступил с сериализаторами активной модели?
Справочная информация. Моя цель - представить множество планов от плановых функций, где каждый план может иметь некоторыедополнительная информация для его собственных отношений сданная функция (и эта информация различна для каждого плана, поэтому она не относится к объекту функции)
Если вы ответите, что я не должен делать это, то этохорошо, но, пожалуйста, представьте альтернативу, которую вы считаете предпочтительной.
// My desired output
{
"data": [
{
"id": "small",
"type": "plans",
"attributes": {
/* Some attributes */
},
"relationships": {
"features": {
"data": [
{
"id": "num-users",
"type": "features",
"meta": {
"value": 1
}
},
{
"id": "num-projects",
"type": "features",
"meta": {
"value": 5
}
}
]
}
}
},
{
"id": "large",
"type": "plans",
"attributes": {
/* Some attributes */
},
"relationships": {
"features": {
"data": [
{
"id": "num-users",
"type": "features",
"meta": {
"value": 5
}
},
{
"id": "num-projects",
"type": "features",
"meta": {
"value": 50
}
},
{
"id": "unlimited-downloads",
"type": "features"
}
]
}
}
}
],
"included": [
{
"id": "num-users",
"type": "features",
"attributes": {
"description": "Number of users"
}
},
{
"id": "num-projects",
"type": "features",
"attributes": {
"description": "Number of projects"
}
},
{
"id": "unlimited-downloads",
"type": "features",
"attributes": {
"description": "Unlimited downloads"
}
}
]
}