我想使用活动模型序列化器重构现有的rails API。
不幸的是,现有的API使用的JSON模式与现有的任何适配器略有不同,而且我无法使用AMS重新创建它。
我想重新创建的架构是这样的:
{
"status": 0,
"message": "OK",
"timestamp": 1438940571,
"data": {
"contacts": [
{
"contact": {
"id": "1",
"first_name": "Kung Foo",
"last_name": "Panda",
"created_at": "2015-07-23T14:09:20.850Z",
"modified_at": "2015-08-04T15:21:36.639Z"
}
},
{
"contact": {
"id": "2",
"first_name": "Johnny",
"last_name": "Bravo",
"created_at": "2015-07-23T14:09:20.850Z",
"modified_at": "2015-08-04T15:21:36.639Z"
}
}
]
}
}
我想知道有没有办法为活动模型序列化器创建自定义适配器,或以其他方式创建此架构。
答案 0 :(得分:0)
可以使用几个序列化程序。
class MessageSerializer < ActiveModel::Serializer
attributes :status, :message, :timestamp, :data
# We could've just used that, were it not for nested hashes
# has_many :contacts, key: :data
attributes :data
def data
ActiveModel::ArraySerializer.new(object.contacts, root: 'contacts')
end
end
class ContactSerializer < ActiveModel::Serializer
attributes :id, :first_name, :last_name, :created_at, :modified_at
def root
'contact'
end
end
似乎没有更好的方法来做到这一点
然后在你控制器的某个地方:
render json: Message.serializer.new(@message, root: false)