2015-08-19 73 views
0

我想在我的項目中使用Ember-cli設置嵌入式記錄。 我無法得到它的工作,我嘗試了不同的配置{嵌入:「總是」等...}但我得到的是:錯誤:斷言失敗:您必須包括一個id用戶在傳遞給對象push請幫忙。如何使用ember-data在模型(嵌套記錄)中嵌入模型?

我使用

DEBUG: ------------------------------- 
DEBUG: Ember    : 1.12.1 
DEBUG: Ember Data  : 1.13.4 
DEBUG: jQuery   : 2.1.4 
DEBUG: Ember Simple Auth : 0.8.0 
DEBUG: ------------------------------- 

我的JSON與QuestionDefinition s是:

{ 
    "data": [ 
     { 
      "created": 1439824135440, 
      "updated": 1439824135440, 
      "userID": 20, 
      "user": { 
       "password": null, 
       "created": null, 
       "updated": null, 
       "photoID": null, 
       "photo": null, 
       "email": "sup[email protected]", 
       "emailConfirmed": false, 
       "phoneNumber": null, 
       "phoneNumberConfirmed": false, 
       "accessFailedCount": 0, 
       "id": 20, 
       "userName": "qwerty" 
      }, 
      "addCategoriesIDs": [], 
      "removeCategoriesIDs": [], 
      "recommendations": [], 
      "removeRecommendstionIDs": [], 
      "patternAnswers": [], 
      "removePatternAnswerIDs": [], 
      "hint": null, 
      "version": 1, 
      "commonVersion": 2, 
      "id": 1, 
      "questionText": "Test?", 
      "weight": 0, 
      "answerType": 0, 
      "status": 0, 
      "estimatedTime": null, 
      "private": false 
     }, 
     { 
      "created": 1439824143340, 
      "updated": 1439824143340, 
      "userID": 20, 
      "user": { 
       "password": null, 
       "created": null, 
       "updated": null, 
       "photoID": null, 
       "photo": null, 
       "email": "[email protected]", 
       "emailConfirmed": false, 
       "phoneNumber": null, 
       "phoneNumberConfirmed": false, 
       "accessFailedCount": 0, 
       "id": 20, 
       "userName": "qwerty" 
      }, 
      "addCategoriesIDs": [], 
      "removeCategoriesIDs": [], 
      "recommendations": [], 
      "removeRecommendstionIDs": [], 
      "patternAnswers": [], 
      "removePatternAnswerIDs": [], 
      "hint": null, 
      "version": 1, 
      "commonVersion": 3, 
      "id": 2, 
      "questionText": "Test?", 
      "weight": 0, 
      "answerType": 0, 
      "status": 0, 
      "estimatedTime": null, 
      "private": false 
     } 
    ] 
} 

QuestionDefinition模式是:

//app/models/questiondefinition.js 
import Ember from 'ember'; 
import DS from "ember-data"; 

export default DS.Model.extend({ 
    //id   : DS.attr('string'), //sie nie uzywa 
    created    : DS.attr('pl-date'), 
    updated    : DS.attr('pl-date'), 
    userID    : DS.attr('number'), 
    user     : DS.belongsTo('user',{async: false, embedded: 'always'}), 
    //hint   : DS.attr('string'), 
    hint     : null, 
    version    : DS.attr('number'), 
    commonVersion  : DS.attr('number'), 
    questionText   : DS.attr('string'), 
    weight    : DS.attr('number'), 
    answerType   : 0, 
    status    : 0, 
    estimatedTime  : DS.attr('number'), 
    "private"   : DS.attr('boolean'), 
    questionDefLegalBasis: function() { 
     return this.get('questionText').length % 2 > 0; 
    }.property('questionText'), 

    /** 
    * One-to-many 
    */ 
    patternAnswers : DS.hasMany('patternanswer'), 
    recommendations: DS.hasMany('recommendation'), 
    categories  : DS.hasMany('questiondefinitioncategory', {async: true}), 
    comments  : DS.hasMany('questiondefinitioncomment', {async: true}) 
}); 

用戶模式是:

//app/models/user.js 
import Ember from 'ember'; 
import DS from "ember-data"; 

export default DS.Model.extend({ 
    "password": DS.attr('string'), 
    "created": DS.attr('pl-date'), 
    "updated": DS.attr('pl-date'), 
    "photoID": DS.attr('number'), 
    "photo": DS.attr('string'), 
    "email": DS.attr('string'), 
    "emailConfirmed": DS.attr('boolean'), 
    "phoneNumber": DS.attr('string'), 
    "phoneNumberConfirmed": DS.attr('boolean'), 
    "accessFailedCount": DS.attr('number'), 
    "userName": DS.attr('string'), 
    /** 
    * One-to-many 
    */ 
    //questionDefinitions : DS.hasMany('questiondefinition'), 
    questionDefinitionComments : DS.hasMany('questiondefinitioncomment'), 
    patternAnswers : DS.hasMany('patternanswer'), 
}); 

最後但並非最不重要的,串行:

//app/serializers/questiondefinition.js:4 
import DS from "ember-data"; 

function removeErrorsIfEmtpy(payload) { 
    if (typeof payload.errors !== 'undefined' && payload.errors.length === 0) { 
     delete payload.errors; 
    } 
} 

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs  : { 
     user: {embedded: 'always', 
      serialize : 'record', 
      deserialize: 'record' 
     } 
     //comments: { serialize: 'ids' } 
    }, 
    extractArray : function (store, type, payload) { 
     payload.questiondefinitions = payload.data; 
     delete payload.data; 
     removeErrorsIfEmtpy(payload); 
     //console.log(arguments); 
     //return this._super(store, type, payload); 
     return this._super.apply(this, arguments); 
    }, 
    extractSingle: function (store, primaryTypeClass, payload, recordId) { 
     payload.questiondefinition = payload.data; 
     delete payload.data; 
     removeErrorsIfEmtpy(payload); 
     //return this._super(store, primaryTypeClass, payload, recordId); 
     return this._super.apply(this, arguments); 
    } 
}); 

回答

0

這個謎一般的問題,可能是沒有答案堆棧的下20M,但在這裏就是答案。 看着questiondefinition serializer,人們發現篡改了負載,因爲服務器對象的響應保持在'數據'屬性中。 神祕錯誤錯誤:斷言失敗:您必須在傳遞給對象的用戶中包含一個用戶標識將我引向了ember-data的來源,我發現我沒有爲用戶模型準備序列化程序。所以燼只是想要的用戶屬性,但它可以得到它是'數據'屬性。因此請記住,始終保持您的序列化程序是最新的。

這就是它!