恩伯有很多关系不坚持

时间:2015-10-20 07:01:37

标签: node.js ember.js ember-data ember-cli

我最近进入了ember.js开发,我遇到了一个问题。 我有两个模型user.js和userpermissions.js

// user
export default DS.Model.extend({
   userName:DS.attr('string'),
   lastName:DS.attr('string'),
   permissionList:DS.hasMany('userpermission',{async:true}),
}); 

// userpermissions
export default DS.Model.extend({
  user:DS.belongsTo('user'),
  permissionName:DS.attr('string'),
  permissionId:DS.attr('string'),  
});

我试图为用户记录设置权限。

export default Ember.Controller.extend({

     selectedPermission: {},
     newUser: {},
     init: function() {
        this.newUser = this.store.createRecord('user');
     },

     addPermission: function() {
        var permission = this.store.createRecord('userpermission');
        permission.set('permissionId', this.get('selectedPermission.id'));
        this.get('newUser').get('permissionList').pushObject(permission);
     }
});

最后为新用户调用save。

this.get('newuser').save();

将数据保存到我的nodejs后端。所有用户权限都记录为null。 我试图寻找解决方案但却找不到解决方案。 任何人都可以指出我做错了什么,或解决方案是什么 谢谢!

3 个答案:

答案 0 :(得分:0)

您似乎没有保存权限记录......

您不必担心表格,但您需要保存两个模型。在通过API保存两条记录时,Ember无法知道所需的操作顺序,因此您必须以正确的顺序明确保存每条记录。

所以尝试修改你的控制器:

export default Ember.Controller.extend({

     selectedPermission: {},
     newUser: {},
     init: function() {
        this.newUser = this.store.createRecord('user');
     },

     addPermission: function() {
        var permission = this.store.createRecord('userpermission');
        permission.set('permissionId', this.get('selectedPermission.id'));
        this.get('newUser').get('permissionList').pushObject(permission);

        permission.save();
     }
});

答案 1 :(得分:0)

我通过添加用户Serializer和EmbeddedRecordsMixin

解决了这个问题
import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
permissionList: { embedded: 'always' },

}
});

答案 2 :(得分:-1)

我们的方式有很多连接。

    // user
    export default DS.Model.extend({
       userName:DS.attr('string'),
       lastName:DS.attr('string'),
    }); 

    // permissions
    export default DS.Model.extend({
      permissionName: DS.attr('string)
    });

    // userpermissions
    export default DS.Model.extend({
      user:DS.belongsTo('user'),
      permission:DS.belongs('permission')
    });

有第三张桌子。

关于保存:Set multiple data with Ember and make it persist on Firebase

user.save().then(function(user) {
  permission.save().then(function(permission) {
      userpermission.save().then(function() {
            // Connection done
      });
  });
}, failure);