Active Model Serializers 0.10使用JSON适配器排除名称空间?

时间:2016-05-30 13:07:16

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

是否有某种方法可以在根密钥中排除模型名称的命名空间部分?

之前我使用的是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" } }

我希望root键与之前一样,即“user”而不是“api / v1 / user”。

编辑1

我正在使用:json适配器。

编辑2

我在GitHub上的存储库中打开了一个issue。让我们看看他们对此有何看法。

编辑3

Active Model Serializers的documentation已更新。它解释了如何覆盖根密钥。

1 个答案:

答案 0 :(得分:0)

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

  1. 在呈现资源时指定root

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

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