Ember hasMany 关系在创建时保存

Ember hasMany relationship save on create

我正在尝试创建一个 ember 具有来自 POJO 的 hasMany 关系的数据记录,这非常困难。这是使用 ember-concurrency(因此任务和 yield 语法。

  saveEntry: task(function* (obj){
      let entry = yield this.model.get('entries').createRecord({
        groupId: obj.objectID,
        name: obj.name,
        ...

      }).save();
      obj.owner_ids.forEach((user_id) => {
        this.store.findRecord('user', user_id).then((user) => {
          entry.get('owners').pushObject(user);
          entry.save();
        });
      })
   }).drop();

所以难点是 'obj.owner_ids',它是 user_ids 的数组。我将每个添加到数组中,但随后需要在每个 pushObject 之后保存,否则它不起作用。即使它确实有效,它也会抛出一堆网络错误(可能是由于保存时的竞争条件)。那里一定有更好的办法,不过我没找到。

我不确定 this.model 在您的代码中代表什么,但您可以尝试获取您需要的所有用户,然后在创建和保存时附加它们,例如:

import { all } from 'rsvp';

saveEntry: task(function* (obj){
  let users = obj.owner_ids.map(userId => this.store.findRecord('user', user_id));

  let promises = this.model.get('entries').createRecord({
    groupId: obj.objectID,
    name: obj.name,
    owners: users,
    ...
  }).save()

  // all() waits for an an array of promises to return
  yield all(promises);
}).drop();