【发布时间】:2023-03-17 20:15:01
【问题描述】:
我遇到了一个奇怪的错误。我正在输入一个表单,它将数据正确地输出为一个对象并通过 REST 发送它。但是当我每次都这样做时,我仍然会收到这个错误。我已将主键更改为“_id”。我尝试了“用户名”,但它给了我一个完全不同的错误并且没有用。
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"
}
【问题讨论】:
-
您在底部显示的响应与顶部错误消息中引用的不同。无论如何,您应该共享父序列化程序类。很可能,那里发生了一些错误。
-
你好,我添加了serverSerializer.js父类。