我有一个使用awesome_nested_set
gem的模型类别,因此它具有模型本身的子代。我已经为模型创建了CategorySerializer
class CategorySerializer < ActiveModel::Serializer
attributes :id, :parent_id, :lft, :rgt, :text, :permalink, :children
def children
object.children
end
end
但是子级没有序列化。我也尝试添加has_many :children, serializer: self
,结果是这样
{
"id": 25918,
"parent_id": null,
"lft": 3,
"rgt": 8,
"text": "ARAG",
"permalink": "25918-arag",
"children": [
{
"id": 25919,
"parent_id": 25918,
"lft": 4,
"rgt": 7,
"text": "Coperchi",
"permalink": "25919-coperchi",
"children": [
{
"id": 25920,
"parent_id": 25919,
"lft": 5,
"rgt": 6,
"text": "Ribaltabili",
"description": "",
"page_title": "",
"meta_key": "",
"meta_description": "",
"key_1": null,
"key_2": null,
"key_3": null,
"extra": null,
"created_at": "2019-03-01T21:08:15.000+01:00",
"updated_at": "2019-04-02T12:27:05.000+02:00"
}
]
}
]
}
第二级子级已成功序列化,但第二级未成功。有没有办法或方法来序列化所有对象子对象?
答案 0 :(得分:0)
在孩子身上调用序列化程序的解决方案如何?注意不要陷入深度嵌套的无限循环
def children
object.children.map { |obj| SomeSerializer.new(obj) }
end
答案 1 :(得分:0)
如果您要默认情况下进行深度嵌套,则可以在初始化程序文件中设置以下config属性
# config/initializers/active_model_serializer.rb
ActiveModelSerializers.config.default_includes = '**
有关更多详细信息,您可以选中this。
您还可以按照以下步骤为孩子添加另一个序列化器
class CategorySerializer < ActiveModel::Serializer
attributes :id, :parent_id, :lft, :rgt, :text, :permalink, :children
def children
ActiveModel::SerializableResource.new(object.children, each_serializer: ChildrenSerializer)
end
end
有关更多信息,您可以参考此link