在“关系”对象中的资源标识符中包含“元”成员

时间:2019-03-19 22:43:02

标签: active-model-serializers json-api

根据我对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对象吗?

我该如何使用主动模型序列化器来做到这一点?

背景: 我的目标是代表许多计划,从计划到要素,其中每个计划可能会因其自身与给定要素的关系而具有一些额外的信息(而且每个计划的信息都不相同,因此它不属于Feature对象)

如果您的答案是我不应该这样做,那很好,但是请提出您认为更可取的选择。

// 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"
      }
    }
  ]
}

0 个答案:

没有答案