0

私は次のモデルがあります:私はここにactive_model_serializersバージョン0.10.6Railsの5つのJSON_APIシリアライザ

を使用しています

class Team < ApplicationRecord 

    # Associations 
    has_many :users 
    has_and_belongs_to_many :projects 
    belongs_to :team_leader, class_name: 'User' 
end 

は私のシリアライザのコードです:

class TeamSerializer < ActiveModel::Serializer 
    attributes :id, :name, :can_delete, :can_edit 

    has_many :projects 
    has_many :users 
    belongs_to :team_leader 
end 

シリアル化の結果は次のとおりです。

{ 
"data":[ 
    { 
     "id":"1", 
     "type":"teams", 
     "attributes":{ 
      "name":"OA", 
      "can-delete":true, 
      "can-edit":true 
     }, 
     "relationships":{ 
      "projects":{ 
      "data":[ 
       { 
        "id":"2", 
        "type":"projects" 
       } 
      ] 
      }, 
      "users":{ 
      "data":[ 
       { 
        "id":"25", 
        "type":"users" 
       } 
      ] 
      }, 
      "team-leader":{ 
      "data":{ 
       "id":"25", 
       "type":"team-leaders" 
      } 
      } 
     } 
    } 
    ] 
} 

"team_leader"の関係は、 "user"というタイプになると思っていたので問題はありましたが、そうではありません。タイプのチームリーダーですが、モデルチームのリーダーはいません。これはフロントエンドアプリケーション(ember 2.14アプリケーション)に混乱を招きます。シリアライザの場合、タイプをオーバーライドする方法はありますか?

class TeamSerializer < ActiveModel::Serializer 
    attributes :id, :name, :can_delete, :can_edit 

    has_many :projects 
    has_many :users 

    attribute :team_leader do 
    team_leader = object.team_leader 
    UserSerializer.new(team_leader) if team_leader 
    end 
end 

例えば、これは当然のUserSerializerの存在を意味し、それは非常に単純なことがありますされていない場合、私は

答えて

0

これを試してみてください...この問題を解決するために、任意の提案を開いています:

class UserSerializer < ActiveModel::Serializer 
    attributes :id, :foo, :bar, :etc 
end 
+0

動作しません。あなたの提案では、それはチームに属性を追加するが、チームの関係にはならない(それはjson-apiの応答として)。 – manosagent