我有一个主要对象'mainobject'
在MainObjectSerializer
中 has_many: childObjects
并在ChildObjectSerializer中:
has_many: grandChildObjects
但是当我尝试序列化时:
options = {include: ['childObjects','childObjects.grandChildObjects']}
JSONAPI::Serializer.serialize(mainobject, options)
我收到了错误:
gems/jsonapi-serializers-0.14.0/lib/jsonapi-serializers/serializer.rb:163:in []: no implicit conversion of Symbol into Integer (TypeError)
在没有孙子对象的情况下很好地进行序列化
答案 0 :(得分:0)
问题是选项中使用的包含必须遵循 format_name
定义的格式def format_name(attribute_name)
attribute_name.to_s.demodulize.camelize(:lower)
end
因此,为了使序列化起作用,我们将命名格式更改为以下内容:
在MainObjectSerializer
中has_many: child_objects
并在ChildObjectSerializer中:
has_many: grand_child_objects
该选项应使用 format_name
定义的低驼峰案例options = {include: ['childObjects','childObjects.grandChildObjects']}
JSONAPI::Serializer.serialize(mainobject, options)
这样我们就可以获得:
...
"included": [
{
"type": "childObject",
"id": "1234",
"relationships": {
"grandChildObjects": {
"data": [
{
"type": "grandChildObject",
"id": "12"
}
]
}
}
},
{
"type": "grandChildObject",
"id": "12",
...
请注意,类型也使用较低的驼峰大小写并且在序列化程序的类型方法中定义:
def type
object.class.name.demodulize.camelize(:lower)
end