设置每个方法的活动模型串行器适配器

jad*_*sta 3 active-model-serializers ruby-on-rails-5

我正在尝试在 Rails 5 中构建一个仅 api 的应用程序。我正在使用活动模型序列化器(AMS)。在我的GET /users(UsersController#index) 端点上,我希望根 json 在用户的 json 数组之前有一个“users”关键字。

如果我设置一个带有ActiveModelSerializers.config.adapter = :json 值的初始值设定项,那么我将获得所需的行为。

但是, GET /users/1简单的用户 json 位于 key 下user。我想摆脱这个键(在本例中)并简单地将用户 json 回答为根 json。

问题是:如何在特定端点/响应/方法上定义 AMS 适配器?那可能吗?

jad*_*sta 5

我应该阅读手册:$

要覆盖“root”键,您必须root:在调用该render方法时提供一个参数。如果您在初始化程序上使用:json适配器,则将如下所示:

render json: @user, root: "admin" 然后这会生成一个像这样的 json:

{ "admin": { "id": 123, "email": "email@example.com" } }

如果需要,您还可以在 后面提供另一个键来root:设置适配器,如下所示:adapter: :json

因此,:attributes适配器没有根密钥。为了删除根密钥,您可以执行以下操作: render json: @user, root: "admin", adapter: :attributes

官方文档在这里这里