belongsTo关系在保存时为空

时间:2017-09-19 21:18:19

标签: ember.js

我有两个有关系的模型,团队和团队成员。在一个页面上,我试图设置它,以便用户可以向团队添加一个新的teamMember,但是当我调用save()时,它会回吐一个团队必须存在,并且在进一步检查时Ember不会嵌入POST中的团队。

team.js

export default DS.Model.extend({
  ...
  teamMember: DS.hasMany('team-member')
}

团队member.js

export default DS.Model.extend({
  ...
  team: DS.belongsTo('team')
}

这就是我的路线

let teamMember = this.get('store').createRecord('teamMember');
let team = this.get('store').findRecord('team', params.teamId).then((results) => {
  teamMember.set('team', results);

  return results;
});

我将团队和teamMember传递给我可以编辑teamMember的组件,并将其保存。

let teamMember = this.get('teamMember');
// get and set teamMember specific fields
teamMember.save();

当我从该行调试时,我可以说teamMember.get('team')并获取所有数据,因此它似乎已正确设置,但我从Rails API获得的只是

{"team_member"=>{"role_id"=>"0", "phone_number"=>"8888888888"}}

显然,如果没有团队将其关联起来,很明显不会创建一个团队成员。

我有一个team-member.js序列化器:

export default ApplicationSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    team: { embedded: 'always' }
  }
});

我确实在应用程序序列化程序中有一些东西,所以我想知道它是否以某种方式覆盖了数据,但是当我调试它时仍然没有认识到团队的存在。

编辑/我的解决方案

知道我是有权访问API的人,我将所有内容都更改为JSONAPISerializer。它正在序列化团队,但不是把它置于“关系”之下。然后我找到了以下代码。

  serialize(snapshot) {
    let serialized = this._super(...arguments);
    let { adapterOptions } = snapshot;
    if (adapterOptions && adapterOptions.updateRelationship === 'tags') {
      return serialized.data.relationships.tags;
    }

    return serialized;
  }

我把它放在我的团队成员序列化程序中,它将团队关系放到适当的位置。

0 个答案:

没有答案