2015-07-21 2 views
0

Отбивая мою голову против стены за эти 2 дня, чтобы выяснить, как отображать объект, у многих объектов есть много объектов в active_model_serializers. Вот мои сериализаторы:Объект имеет много объектов, имеющих много объектов в 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 вопросов и Вопрос ha s_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

Вы можете указать, какой сериализатор вы хотите использовать для вложенных ресурсов. Сериализатор может применяться к любой модели. Вы должны позаботиться о том, чтобы применить правильный сериализатор к нужному объекту в своем контроллере, вот и все.

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