まず、最新の Ember / EmberDataを使用することをお勧めしますがextractSingle
、カスタムシリアライザーを拡張して埋め込みレコードを手動で処理する必要があります(以下の例を参照)。また、次のような関係を定義する必要があります。
App.Activity = DS.Model.extend({
name: DS.attr('string'),
owner: DS.belongsTo('user')
});
App.User = DS.Model.extend({
name: DS.attr('string'),
activities: DS.hasMany('activity')
});
次に、ActiveModelAdapter
サーバーとの通信時にアンダースコアを使用している場合 (つまり、EmberData 0.13 のように) を使用することをお勧めします。
App.ApplicationAdapter = DS.ActiveModelAdapter;
最後に、owner
forを使用するには、カスタムシリアライザーでUser
オーバーライドします。typeForRoot
例えば:
App.ApplicationSerializer = DS.ActiveModelSerializer.extend({
typeForRoot: function(root) {
if (root == 'owner' || root == 'owners') { root = 'user'; }
return this._super(root);
},
// based on: https://github.com/emberjs/data/blob/master/TRANSITION.md#embedded-records
extractSingle: function(store, type, payload, id, requestType) {
var owner = payload.activity.owner,
ownerId = owner.id;
payload.owners = [owner];
payload.activity.owner_id = ownerId;
return this._super.apply(this, arguments);
}
});
JSBin の例