2016-11-08 4 views
0

私はこの関係をモデル化することにいくつかの困難を抱えています。誰かが助けてくれますか?Ember CLIミラージュ:2レベルのサイドロードされた応答

テナントは、App

アンアプリケーションは大きな落とし穴がサイドローディングの2つのレベルであるブランド

を有しています。次のように私の現在のAPIは、レスポンスを返す:

私のように私の モデルを設定している
{ 
    "tenants": [ 
     { 
     "app_id": "app_001", 
     "id": 1, 
     "name": "Illya_no_delete", 
     } 
    ], 
    "app": [ 
    { 
     "brand_id": "brand_001", 
     "id": "app_001", 
     "name": "updated test client 2 name", 
    } 
    ], 
    "brands": [ 
    { 
     "id": "brand_001", 
     "app_id": "app_001" 
    } 
    ] 
} 

// mirage/serializers/app.js 
export default ApplicationSerializer.extend({ 
    include: ['brand'] 
}); 

// mirage/serializers/tenant.js 
export default ApplicationSerializer.extend({ 
    include: ['app'] 
}); 

:私のように私のシリアライザを設定している

// models/tenant.js 
export default Model.extend({ 
    app: belongsTo('app'), 
}); 


// mirage/models/app.js 
export default Model.extend({ 
    brand: belongsTo('brand'), 
    tenant: belongsTo('tenant') 
}); 

// mirage/models/brand.js 
export default Model.extend({ 
    app: belongsTo('app') 
}); 

シナリオを次のように設定しました:

// mirage/scenarios/default.js 
let brand = server.create('brand'); 
let app = server.create('app', {brand: brand}); 
server.createList('tenant', 10, {app: app}); 

残念なことに私の生成された応答は、サイドロードされたブランドオブジェクトを返しません。

{ 
    tenant: { 
    id: 1, 
    app_id: 2 
    }, 
    apps: [ 
    { 
     id: 2, 
     brand_id: null, 
     tenant_id: 1 
    } 
    ] 
} 

私は「ブランド」を表示するために必要なことについて何か提案していますか?

+1

(のhttp:/ /www.ember-cli-mirage.com/docs/v0.2.x/serializers/#serializeresponse-request)を実行して最終的な処理を行います。 'belongsTo'は反対側が' hasMany'であると仮定します。 –

+0

ありがとう@SamSelikoff!本当に答えを感謝します。私は解決策があると思う。ここに投稿します。 – unicornherder

答えて

0

興味がある人には、サム・セリコフのコメントに基づいて私のために働いた解決策があります。フィードバックにオープン:

モデル:

// models/tenant.js 
export default Model.extend({ 
    app: belongsTo('app'), 
    brand: belongsTo('brand'), 
}); 

// mirage/models/app.js 
export default Model.extend({ 
    tenant: belongsTo('tenant') 
}); 

// mirage/models/brand.js 
export default Model.extend({ 

}); 

シリアライザ:

// mirage/serializers/tenant.js 
export default ApplicationSerializer.extend({ 
    include: ['app', 'brand'], 

    serialize() { 
    let json = ApplicationSerializer.prototype.serialize.apply(this, arguments); 
    if (json.brands.length > 0) { 
     let brandId = json.brands[0].id; 
     json.applications[0].brand_id = brandId; 
    } 
    return json; 
    } 
}); 

デフォルトのシナリオ:

// mirage/scenarios/default.js 
let brand = server.create('brand'); 
let app = server.create('app'); 
server.createList('tenant', 10, {app: app, brand: brand}); 

応答:

{ 
    tenant: { 
    id: 1, 
    app_id: 2 
    }, 
    apps: [ 
    { 
     id: 2, 
     brand_id: 3, 
     tenant_id: 1 
    } 
    ], 
    brand: [ 
    { 
     id: 3 
    } 
    ] 
} 
私は関係の片側を削除し、[フックをシリアル化]を使用して示唆している今の関係は現在、適切に、(それが作品にあります)はサポートされていません一対一
関連する問題