Ember一对一没有为关系的一方序列化外键

时间:2016-09-27 22:14:26

标签: ember.js

我在一夫一妻制的关系中有两件事。为了匿名,我们将其称为UserProfile

user.js的

export default DS.Model.extend({
    profile: DS.belongsTo('profile', { async: false }),
    name: DS.attr('string')
});

profile.js

export default DS.Model.extend({
    user: DS.belongsTo('user', { async: true }),
    active: DS.attr('boolean')
});

用户使用他们的个人资料附在臀部,因此个人资料总是侧载。

{
    "user": {
        "id": 23,
        "name": "Homer Simpson",
        "profile": 42
    },
    "profiles": [
        {
            "id": 42,
            "active": true,
            "profile": 23
        }
    ]
}

现在,说用户遇到当地犯罪现场的麻烦并决定更改他的名字。为了在雷达下飞行,他还希望他的个人资料被停用。

let user = this.get('user'),
    profile = user.get('profile');

profile.get('user.id'); // 23

user.set('name', 'Mr. Thompson');
user.save().then(() => {
    profile.set('active', false);
    return profile.save();
});

user.save的有效负载很好......

{
    "user": {
        "id": 23,
        "name": "Mr. Thompson",
        "profile": 42
    }
}

但对于profile.save ..?

{
    "profile": {
        "id": 42,
        "active": false,
        "user": null
    }
}

为什么,为什么,用户被设置为null

没有自定义序列化器正在发挥作用,也没有对.save

进行任何更改
  • Ember CLI:1.13.10
  • Ember数据:1.13.15

2 个答案:

答案 0 :(得分:0)

在执行schedule.save()??

时,schedule对象具有用户模型

您的模型还是日程安排还是个人资料?

答案 1 :(得分:0)

好。我错了。 一个自定义序列化器正在发挥作用,但它不适用于用户的Profile。

<强>串行器/ user.js的

 extractAttributes: function(modelClass, resourceHash) {
    var rval = this._super(modelClass, resourceHash);
    // add profile as profileId
    rval.profileId = resourceHash.profile;
    return rval;
 }

这是在我们重新构建关系之前,其他人如何构建关系的一部分。

现在,删除此用户自定义会导致个人资料正确序列化,并在保存时保持userId完好无损。