尝试序列化子子对象时jsonapi序列化程序出错

时间:2016-08-17 12:30:57

标签: json ruby serialization

我有一个主要对象'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)

在没有孙子对象的情况下很好地进行序列化

1 个答案:

答案 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