2017-02-21 18 views
0

Я получаю странную ошибку. Я вхожу в форму, и она правильно выводит данные как объект и отправляет их через REST. Но я все еще получаю эту ошибку, когда я делаю это каждый раз. Я изменил primaryKey на "_id". Я попробовал «имя пользователя», но это дало мне совершенно другую ошибку и бесполезно.Ember: Assertion Failed: вы должны указать «id» для учетной записи сервера в объекте, переданном «push»

Object {username: "adas", password: "dasdsa", pincode: "dasdasdsadsad", centcoin: "0"} 
ember.debug.js:19160 Error: Assertion Failed: You must include an 'id' for account in an object passed to 'push' 
    at EmberError (ember.debug.js:19083) 
    at assert (ember.debug.js:6778) 
    at Object.assert (ember.debug.js:18895) 
    at assert (ember-data.js:646) 
    at Class._pushInternalModel (ember-data.js:9725) 
    at Class.push (ember-data.js:9701) 
    at ember-data.js:10079 
    at Backburner.run (ember.debug.js:294) 
    at Class._adapterRun (ember-data.js:9950) 
    at ember-data.js:10074 
defaultDispatch @ ember.debug.js:19160 
dispatchError @ ember.debug.js:19143 
onerrorDefault @ ember.debug.js:32916 
trigger @ ember.debug.js:51624 
(anonymous) @ ember.debug.js:52618 
invoke @ ember.debug.js:990 
flush @ ember.debug.js:1054 
flush @ ember.debug.js:862 
end @ ember.debug.js:176 
run @ ember.debug.js:298 
join @ ember.debug.js:318 
run.join @ ember.debug.js:23770 
hash.success @ ember-data.js:12808 
fire @ jquery.js:3305 
fireWith @ jquery.js:3435 
done @ jquery.js:9242 
(anonymous) @ jquery.js:9484 

AccountAdapter.js

createRecord(store, type, snapshot) { 
      var data = {}; 
      var serializer = store.serializerFor(type.modelName); 
      var url = this.buildURL(type, null, snapshot, 'createRecord'); 

      //serializer.serializeIntoHash(data, null, snapshot, { includeId: false }); 
      data = this.serialize(snapshot, {includeId: false}); 
      console.log(data); 
      return this.ajax(url, "POST", { data: data }); 
     }, 
     urlForCreateRecord(type) { 
      return this._buildURL(type); 
     }, 

AccountSerializer.js

import AccountsSerializer from "store/ServerSerializer"; 


export default AccountsSerializer.extend({ 
    primaryKey: "_id", 

    modelNameFromPayloadKey() { 
     return "serverAccount"; 
    }, 

}); 

AccountsModel.js

import { attr, 
    Model } from "EmberData"; 


export default Model.extend({ 
    username : attr("string"), 
    password: attr("string"), 
    pincode : attr("string"), 
    centcoin : attr("string"), 

}).reopenClass({ 
    toString() { return "accounts"; } 
}); 

AccountsNewRoute.js

save() { 
      const store = get(this, "store"); 

      var model = get(this, "controller.model"); 
      store.createRecord("serverAccount", { 
       //id: get(model, "username"), 
       username: get(model, "username"), 
       password: get(model, "password"), 
       pincode: get(model, "pincode"), 
       centcoin: "0" 
      }).save().then((saved) => { 
       console.log("THIS IS SAVED ADD ACCOUNT", get(saved, "pincode")); 
       this.send("addAccount", saved); 
       return saved; 
      }); 
      //let account = this.controller.get("model"); 
      //let account = get(this, "controller.model"); 
      console.log("THIS IS SAVED ADD ACCOUNT", get(model, "username")); 
      console.log("THIS IS SAVED ADD ACCOUNT", get(model, "password")); 
      console.log("THIS IS SAVED ADD ACCOUNT", get(model, "pincode")); 


     }, 

ServerSerializer.js

import { 
    RESTSerializer, 
} from "EmberData"; 
export default RESTSerializer.extend({ 
    isNewSerializerAPI: true, 

    primaryKey: "_id", 

}); 

сервер должен ответить с этим:

{ 
    "username": "dadsdsadsa", 
    "pincode": "fdsfdsfd", 
    "password": "fdsfdsfdsfds", 
    "createdAt": "2017-02-21T07:33:53.870Z", 
    "setUpdatedAt": "2017-02-21T07:33:53.870Z", 
    "_id": "twY0MFUeNf4UP7XO" 
} 
+0

Ответ, который вы видите внизу, отличается от приведенного в сообщении об ошибке вверху. В любом случае, вы должны поделиться родительским классом сериализатора. Скорее всего, там что-то не так. –

+0

Эй, я добавляю родительский класс serverSerializer.js. – dom

ответ

0

Ваша проблема заключается в том, что вы используете RESTSerializer, который требует полезной нагрузки, чтобы быть обернуты в другой объект, е. g .:

{ 
    "account": { 
    "username": "dadsdsadsa", 
    "pincode": "fdsfdsfd", 
    "password": "fdsfdsfdsfds", 
    "createdAt": "2017-02-21T07:33:53.870Z", 
    "setUpdatedAt": "2017-02-21T07:33:53.870Z", 
    "_id": "twY0MFUeNf4UP7XO" 
    } 
} 

Попробуйте вместо этого использовать JSONSerializer.