Rails 5 JSON API 自定义 JSON 响应

Rails 5 JSON API with custom JSON response

我正在与 JSON 渲染作斗争。我想遵守简单的 JSend response format.

基本上我想要的是回复中的状态和数据。

我已经将我的 Serializer 默认适配器设置为 json :

ActiveModelSerializers.config.adapter = :json

我的序列化器很简单:

class RecordSerializer < ActiveModel::Serializer
  attributes :id, :raw
end

所以当我这样做时:

record_list = @current_user.records
render json: record_list

我明白了:

{
    "records": [
        {
            "id": 1,
            "raw": "aaa"
        },
        {
            "id": 2,
            "raw": "bbb"
        }
    ]
}

现在是棘手的部分,如果我想在顶部添加一个 data 键,它会覆盖我的 records 键而不是添加它在上面。

render json: record_list, root: "data"

给这个:

{
    "data": [
        {
            "id": 1,
            "raw": "aaa"
        },
        {
            "id": 2,
            "raw": "bbb"
        }
    ]
}

此外,如何添加其他键,例如 status 键?一旦我创建了一个自定义哈希,序列化器就会被忽略。所以例如这个:

render json: {:status=>"success", :code=>200, :message=>"Hello", data: record_list}

请问returns这个:

{
    "status": "success",
    "code": 200,
    "message": "Hello",
    "data": [
        {
            "id": 1,
            "raw": "aaa",
            "created_at": "2018-07-16T19:49:32.960Z",
            "updated_at": "2018-07-16T19:49:32.960Z",
        },
        {
            "id": 2,
            "raw": "bbb",
            "created_at": "2018-07-16T20:01:55.804Z",
            "updated_at": "2018-07-16T20:01:55.804Z",
        }
    ]
}

所以我想我明白 render json: my_variable 单独将理解将 my_variable 转换为选择的 json 序列化器适配器但不能使用自定义哈希?

我当然可以这样做:

record_list = {}
record_list["records"] = @current_user.records.select(:id, :raw)

但我觉得这不是正确的方法,然后 Serializer 就没用了。

谢谢!

我选择尝试一下 Netflix 团队的 Fast JSON API gem。可以进行出色的定制,快速且轻便。