如何在Ember.js中保存具有多对多关系的模型

How to save models with many-to-many relationship in Ember.js?

本文关键字:关系 模型 保存 Ember js      更新时间:2023-09-26

我被这个问题困扰了很长时间,我认为我错过了一些显而易见的东西。以下是我案例的简化模型:

Patient有他/她服用的所有药物。还有Medicine,它有所有服用它的病人

// Patient model
Yo.Patient = DS.Model.extend({
    firstName: DS.attr('string'),
    lastName: DS.attr('string'),
    meds: DS.hasMany('medicine')
});
// Medicine model
Yo.Medicine = DS.Model.extend({
    title: DS.attr('string'),
    patients: DS.hasMany('patient')
});

我已经阅读了官方手册和许多资源。最后一个也是最接近我的案例是这个Toptal教程。我现在要做的是:

  1. 在保存新患者之前,我将Medicine对象的数组推送到newPatient.meds
  2. 然后我保存newPatient
  3. 保存完成后,我将遍历Medicine对象的数组,将newPatient推送到每个对象并保存每个对象。

    newPatient.get('meds').pushObjects(meds);
    newPatient.save().then(function (p) {
        for (var i = 0; i < meds.length; i++) {
            meds[i].get('patients').pushObject(p);
            meds[i].save();
        };
    });
    

但结果并不是它想要的

  1. 获救的病人没有任何药物。在POST中,对服务器meds的请求是空数组
  2. 每个保存的药物在patients中都有患者id。但它总是在数组的零位上有CCD_ 11

此外,在StackOverflow上也存在类似的问题。但解决方案并不是很有用。答案是1.5岁,这是Ember世界的永恒。

编辑Josh RecordArray在评论中提出的建议现在不能用于我的情况。也许可以,但我不知道怎么做。我有一个创建新病人的表格。有药物复选框列表。所以我只需要将选中的推送到newPatient.meds

我现在要做的是:获取选中复选框的id(等于对应的对象id),然后为每个id获取Medicine实例并将其放入数组中。然后我试着把它推到"newPatient.meds"中。

您应该使用序列化程序来解决这个问题。以下是您的问题

的答案