【问题标题】:jsonapi and active_mode_serializers how to get relationship attributes in the response?jsonapi 和 active_mode_serializers 如何在响应中获取关系属性?
【发布时间】:2015-10-11 21:46:43
【问题描述】:

技术背景:rails 4.2.2,active_model_serializers 0.10.0.rc2 当我将产品添加到购物车时,给定一个购物车和一个产品列表,我希望得到响应:

{
"data": {
  "id": "575",
  "type": "carts",
  "attributes": {
    "name": "cart 1"
  },
  "relationships": {
    "cart_products": {
      "data": [
        {
          "type": "cart_products",
          "id": "32",
          "attributes": {
            "product_id": 456
          }
        }
      ]
    }
  }
}
}

不幸的是, 当前的响应是

{
"data": {
"id": "575",
"type": "carts",
"attributes": {
  "name": "cart 1"
},
"relationships": {
  "cart_products": {
    "data": [
      {
        "type": "cart_products",
        "id": "32",

      }
    ]
  }
}

} }

有没有办法渲染关系属性?

【问题讨论】:

  • 你得到解决方案了吗??

标签: ruby-on-rails active-model-serializers json-api


【解决方案1】:

JSON:API 规范解释了关系数据应该是怎样的。根据规范,您所要求的实际上是嵌套的,或者更好的是“包含”。

我建议您阅读一下http://jsonapi.org/format/#document-compound-documents,以了解有关包含/嵌套关系的规范的更多详细信息

另外,关于您的问题,您需要告诉您的序列化程序呈现包含的元素,如下所示:render @posts, include: ['authors', 'comments'] 更多信息请看这里:https://github.com/rails-api/active_model_serializers

【讨论】:

  • 嗨@infinityzxx:我在我的控制器中添加了类似渲染分支的命令,包括:['installations']。但我没有得到安装表的所有属性。我错过了什么
  • 不幸的是,我不是 Rails 专家,我建议您针对该主题创建自己的问题。
【解决方案2】:

根据手册:

render json: @posts, include: ['author', 'comments', 'comments.author']
  # or
render json: @posts, include: 'author,comments,comments.author'

更多细节:

  1. http://jsonapi.org/format/#document-compound-documents
  2. https://github.com/rails-api/active_model_serializers/blob/a032201a91cbca407211bca0392ba881eef1f7ba/docs/general/adapters.md#included

【讨论】:

    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 2018-12-17
    • 2019-04-09
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多