我正在使用active-model-serializer。我有一个需要以特殊形式作为json返回的对象的集合。到目前为止,这是我写的内容:
@tickets = Ticket.where(status: "PLACED")
render json: @tickets, root: 'placed', each_serializer: ItemSerializer
这是我的商品序列化器:
class ItemSerializer < ApplicationSerializer
attributes :pool_id, :selections
def root
"params"
end
end
以下是当前代码的响应:
[{\"pool_id\":759,\"selections\":\"1/2/3/4/5/6/7/8\"}]
我希望能够向阵列的每个元素添加根密钥"params"
,并在阵列之前添加全局根密钥"placed"
,因此所需的输出为:
{ "placed": [
{
"params": {
"pool_id": 123,
"selections": "1/1/1"
}
}
]
}
如何通过主动模型序列化器实现?
答案 0 :(得分:0)
对于全局根密钥,我需要在渲染调用中添加adapter: :json
render json: @tickets, root: 'placed', each_serializer: BatchItemSerializer, adapter: :json
要在每个序列化元素的根部添加密钥,可以覆盖序列化器中的attributes
方法。在这种情况下,您可以这样:
def attributes(*args)
hash = super
{ params: hash }
end