简体   繁体   English

灰烬有很多关系没有持久

[英]Ember hasMany Relationship not persisting

I recently got into ember.js development and I'm facing a problem. 我最近进入ember.js开发,现在遇到了一个问题。 I've two models user.js and userpermissions.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'),  
});

I'm trying to set permissions for a user record. 我正在尝试为用户记录设置权限。

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);
     }
});

Finally save is called for new user. 最后,保存被称为新用户。

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

To persist data to my nodejs back-end. 将数据持久化到我的nodejs后端。 All the userpermissions are recorded as null. 所有用户权限均记录为空。 I've tried to search for a solution but couldn't find one. 我试图寻找一种解决方案,但是找不到。 Could anyone point me what i am doing wrong, or what is the solution thank you! 谁能指出我做错了什么,或者解决方案是什么,谢谢!

At no point do you seem to be saving the Permission record... 您似乎根本没有保存权限记录...

You don't need to worry about tables, but you will need to save both models. 您无需担心表,但是您需要保存两个模型。 Ember can't presume to know the required order of operation when it comes to saving the two records via your API, so you must save each explicitly, in the correct order. 通过API保存两个记录时,Ember无法假定知道所需的操作顺序,因此您必须以正确的顺序显式地保存每个记录。

So try modifying your controller as such: 因此,尝试像这样修改控制器:

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();
     }
});

i resolved this by adding user Serializer and EmbeddedRecordsMixin 我通过增加用户串行和EmbeddedRecordsMixin解决了这个

import DS from 'ember-data';

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

}
});

The way we make hasMany connections. 我们的制作方式有很多联系。

    // 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')
    });

By having a third table. 通过拥有第三张桌子。

About saving: Set multiple data with Ember and make it persist on Firebase 关于保存: 使用Ember设置多个数据并将其保留在Firebase上

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM