我有两个有关系的模型,团队和团队成员。在一个页面上,我试图设置它,以便用户可以向团队添加一个新的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;
}
我把它放在我的团队成员序列化程序中,它将团队关系放到适当的位置。