2015-08-16 66 views
1

我想在序列化器和啓用json_api適配器中的關係使用自定義序列化器。但是,這些關係沒有正確序列化(或者更好,根本不顯示/序列化)。主動模型序列化器不能使用json_api適配器

PostController.rb

def index 
    render json: Post.all, each_serializer: Serializers::PostSerializer 
end 

串行

module Api 
    module V1 
    module Serializers 
     class PostSerializer < ActiveModel::Serializer 
     attributes :title, :id 

     belongs_to :author, serializer: UserSerializer 
     has_many :post_sections, serializer: PostSectionSerializer 
     end 
    end 
    end 
end 

JSON輸出:

{ 
    "data": [ 
     { 
      "attributes": { 
       "title": "Test Title" 
      }, 
      "id": "1", 
      "relationships": { 
       "author": { 
        "data": { 
         "id": "1", 
         "type": "users" 
        } 
       }, 
       "post_sections": { 
        "data": [ 
         { 
          "id": "1", 
          "type": "post_sections" 
         } 
        ] 
       } 
      }, 
      "type": "posts" 
     } 
    ] 
} 

,你可以看,關係沒有履行,只有當我指定一個自定義序列化程序爲關係發生

如果我做這樣的事情:

module Api 
    module V1 
    module Serializers 
     class PostSerializer < ActiveModel::Serializer 
     attributes :title, :id 

     belongs_to :author # no custom serializer! 
     has_many :post_sections # no custom serializer! 
     end 
    end 
    end 
end 

的關係被正確顯示,但不使用自定義序列...... 有什麼問題嗎?

編輯

按照json API 1.0 Format,我所取回的是所謂的resource identifier object

以下主數據是一個單一的資源標識符對象 引用相同資源:

{ 「數據」:{ 「類型」: 「物品」, 「ID」: 「1」 }}

有沒有辦法阻止獲取資源標識符對象,並獲得實際的數據?

回答

4

關係僅根據json-api exmaples返回idtype。如果您需要返回關於此關係的更多信息,則應在渲染操作中添加include選項。

Ex。

PostController.rb

class PostsController < ApplicationController 
    def show 
    render json: @post, include: 'comments' 
    end 
end 

串行器

class PostSerializer < ActiveModel::Serializer 
    attributes :id, :title, :content 
    has_many :comment, serializer: CommentSerializer 
end 

class CommentSerializer < ActiveModel::Serializer 
    attributes :id, :title, :content 
end 

JSON輸出:

{ 
    "data": { 
     "id": "1", 
     "type": "post", 
     "attributes": { 
      "title": "bla", 
      "content": "bla" 
     }, 
     "relationships": { 
      "comment": { 
       "data": [ 
        { 
         "type": "comments", 
         "id": "1" 
        } 
       ] 
      } 
     } 
    }, 
    "included": { 
     { 
      "id": "1", 
      "type": "comments", 
      "attributes": { 
       "title": "test", 
       "content": "test" 
      } 
     } 
    ] 
} 
+0

@克里斯 - 彼得斯或布魯諾:有T A方式o在序列化程序中默認包含關聯,而不必在每個我們稱之爲渲染的地方在控制器中執行它們。是否有一個include選項可以添加到序列化器中的has_one/has_many關聯中? – geoboy

+0

@geoboy看起來像別人今天有同樣的想法:https://github.com/rails-api/active_model_serializers/issues/1333這個問題表明,這種事情還沒有可用。 –

相關問題