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。可以进行出色的定制,快速且轻便。
我正在与 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。可以进行出色的定制,快速且轻便。