【问题标题】:Active Model Serializer remove relationship member when using JSON API使用 JSON API 时,Active Model Serializer 删除关系成员
【发布时间】:2016-01-28 22:47:59
【问题描述】:

我正在使用带有 JSON API 适配器的最新 AMS v0.10.0.rc3

到目前为止效果很好,并且正在添加一些我想更改的有用约定。

例如,假设我有一个 Post 序列化器和一个 Comment 序列化器,如下所示:

class Post < ActiveModel::Serializer
  attributes :id, :title
  has_many :comments
end

class Comment < ActiveModel::Serializer
  attributes :id, :comment
  belongs_to :post
end

然后,如果我请求 /posts/1,例如,我会得到以下信息

{
  "data": {
    "id": "1",
    "type": "posts",
    "attributes": {
      "title": "My awesome title",
    },
    "relationships": {
      "comments": {
        "data": [
          {
            "id": "1",
            "type": "comments"
          },
          {
            "id": "2",
            "type": "comments"
          }
        ]
      }
    }
  }
}

注意relationships 成员是如何出现的,并且根据spec 被标记为带有MAY 的可选成员。 这是一个很好的约定,我需要重写一些时间。

所以我的问题是:

  • 如何在序列化程序或控制器级别删除relationship 成员?

(如果我遗漏了一些细节,请发表评论,我会更新问题。)

【问题讨论】:

    标签: active-model-serializers json-api


    【解决方案1】:

    目前,您最好的选择是定义两个序列化程序,一个带有关联,一个没有关联,并在您的渲染调用中指定要使用的 (render json: posts, each_serializer: PostWithoutAssociationsSerializer)。

    目前正在讨论向关联和属性添加 include_if 选项,如果它被合并,您可能会利用它。

    【讨论】:

    • 请注意,除非您的应用程序需要真正的高性能,否则您也可以简单地忽略负载中的relationships
    • 是的,但是我如何真正删除另一个序列化程序中的relationships 成员?
    • 只需不指定任何关联(has_manybelongs_tohas_one)。
    • @beauby 如果您需要先前包含的计算属性的关系但您不想要关系数据本身怎么办?如果您不指定 has_one 或 has_many,AMS 将调用包含的关系
    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多