web-dev-qa-db-ja.com

アサーションに失敗しました:「プッシュ」Ember.jsv-2.4に渡されるオブジェクトにアカウントの「id」を含める必要があります

私はEmberに不慣れで、問題の解決策がどこにも見つかりません。ここのスタックや他のemberフォーラム)で質問を読みました。 、しかしそれらのどれも私のために働くようには見えません。

簡単なサインアップフォームを作成しようとしています。バックエンドにはDjangoを使用していることに注意してください。これが私のコードです:

サーバーの応答:

[{"username":"user1","password":"123","email":"[email protected]"},        
{"username":"user2","password":"456","email":"[email protected]"}]

残り火モデル:

import DS from 'ember-data';

export default DS.Model.extend({
    username: DS.attr(),
    password: DS.attr(), 
    email: DS.attr()
});

Emberアダプター:import DS from'ember-data ';

export default DS.RESTAdapter.extend({
    Host: '/api',
    contentType: 'application/json',
    dataType: 'json',

    headers: {
        username: 'XXXX',
        password: 'XXXX'
   } 
});

エンバーシリアライザー:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: '_id'
});

エンバールート:import Ember from'ember ';

export default Ember.Route.extend({
    model() {
        return this.store.findAll('account');
    }
});

エンバーコントローラー:

import Ember from 'ember';

export default Ember.Controller.extend({

    actions: {

    signup(){
        console.log('My username is: ', this.get('username'));
        console.log('My password is: ', this.get('password'));
        console.log('My email is: ', this.get('email'));

        var account = this.store.createRecord('account', {
                username: this.get('username'),
                password: this.get('password'),
                email: this.get('email')
        });

        account.save();

    }
    }
});

この実装では、前述のエラーが発生します。どんな助けでもいただければ幸いです。前もって感謝します。

12
Jack

バックエンドはIDで応答する必要があります。

{"id":123,"username":"user1","password":"123","email":"[email protected]"}

特定のフィールドをIDとして機能させたい場合を除いて、シリアライザーを実際に使用する必要はありません。したがって、上記の例では、ember-dataはバックエンドが戻ることを期待します

{**"_id":123**,"username":"user1","password":"123","email":"[email protected]"}

または、次のようなことを行うことができます。

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: 'username'
});

そして、IDとしてユーザー名を使用します。

18
Igor

エラーを修正しました。問題は、バックエンドがユーザー名をIDとして使用していたため、emberが認識できなかったことです。

Emberシリアライザーの固定コードは次のとおりです。

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
     primaryKey: 'username'
});
3
Jack