【问题标题】:Active Model Serializers 0.10 exclude namespaces with JSON adapter?Active Model Serializers 0.10 排除带有 JSON 适配器的命名空间?
【发布时间】:2016-05-30 13:07:15
【问题描述】:

有没有办法在根键中排除模型名称的命名空间部分?

我之前使用过 Active Model Serializer 0.9 版,我在 localhost:3000/api/v1/users/1 的 User 的 JSON 表示类似于:

{ "user": { "id": 1, "first_name": "Foo", "last_name": "Bar" } }

我最近升级到 0.10 版,现在我得到了包含在根键中的命名空间:

{ "api/v1/user": { "id": 1,"first_name": "Foo", "last_name": "Bar" } }

我希望根键和以前一样,即“user”而不是“api/v1/user”。

编辑 1

我正在使用:json 适配器。

编辑 2

我在 GitHub 上的存储库中打开了 issue。让我们看看他们是怎么说的。

编辑 3

活动模型序列化器的documentation 已更新。它解释了如何覆盖根密钥。

【问题讨论】:

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


    【解决方案1】:

    您必须使用 JSON 适配器,并且通过查看代码,您有几个选择:

    1. 在渲染资源时将root指定为

      render json: @user, root: "user"
      
    2. 似乎根是通过调用序列化程序的 json_key 方法获取的,因此如果您覆盖该方法,您应该能够在序列化程序级别定义根。

    3. 您可以通过添加 root 选项覆盖序列化程序上的初始化以调用 super,因为它是在初始化序列化程序基类 https://github.com/rails-api/active_model_serializers/blob/b4e2ac300cdb4424549660a175c8cb777194b065/lib/active_model/serializer.rb#L109 时分配的

    【讨论】:

    • 如果你想操作一些特定的渲染,替代 1 是合适的,但由于我在我的 API 中为我的所有模型使用命名空间,这对我来说不是一个很好的选择。
    • 这些是我在浏览当前代码/文档时能找到的唯一选项
    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多