在这两天的时间里,我把头靠在墙上,弄清楚如何显示对象有很多对象在active_model_serializers中有很多对象。这是我的序列化器:
部分序列化程序:
class SectionSerializer < ActiveModel::Serializer
attributes :id, :title, :description
has_many :questions, foreign_key: 'section_id', class_name: 'Comment'
end
以下是我的评论序列化程序
class CommentSerializer < ActiveModel::Serializer
attributes :id, :body
belongs_to :section
has_many :replies, class_name: 'Comment', foreign_key: 'question_id'
belongs_to :question, class_name: 'Comment'
end
基本上我想实现部分 has_many 问题,问题 has_many 回复,但两者都问题和回复是同一型号,评论型号。
问题是当我获取所有部分时如何包含回复。现在我得到了这个JSON:
{
"id": 1,
"title": "section 1",
"description": "Lorem ipsum dolor sit amet",
"questions": [
{
"id": 1,
"body": "question 1"
}
]
}
正如我们所看到的,在问题数组中没有回复,我需要JSON类似于序列化程序。
{
"id": 1,
"title": "section 1",
"description": "Lorem ipsum dolor sit amet",
"questions": [
{
"id": 1,
"body": "question 1",
"replies" : [
{
"id": 2,
"body": "reply 1 for question 1"
},
{
"id": 3,
"body": "reply 2 for question 1"
}
]
}
]
}
我非常感谢你的帮助。
谢谢!
答案 0 :(得分:0)
您可以指定要用于嵌套资源的序列化程序。序列化程序可以应用于任何模型。您必须注意将正确的序列化程序应用于控制器中的正确对象,这就是全部。
class SectionSerializer < ActiveModel::Serializer
attributes :id, :title, :description
has_many :questions, foreign_key: 'section_id', class_name: 'Comment', serializer: CommentSerializer, embed: :object
end
class QuestionSerializer < ActiveModel::Serializer
attributes :id, :body
has_many :replies, ..., embed: :object, serializer: ReplySerializer
end
class ReplySerializer < ActiveModel::Serializer
attributes :id, :body
end