3

乾杯!たとえば、次の3つのモデルがあります。

App.Foo = DS.Model.extend({
  bars: DS.hasMany('App.Bar', {embedded:'always'}),
  bazes: DS.hasMany('App.Baz', {embedded:'always'})
});

App.Bar = DS.Model.extend({
  foo: DS.belongsTo('App.Foo')
});

App.Baz = DS.Model.extend({
  foo: DS.belongsTo('App.Foo)
});

そして、次のようなアダプタマッピング:

App.RESTSerializer = DS.RESTSerializer.extend({
  init: function() {
    this._super();

    this.map('App.Foo', {
      bars:{embedded: 'always'},
      bazes:{embedded: 'always'}
    })
  }
});

最初に子レコードを別々のトランザクション(github.com/emberjs/data/pull/440)に保存しています:

barTransaction = App.store.transaction();
bar = barTransaction.createRecord(App.Bar);

//later
bazTransaction = App.store.transaction();
baz = bazTransaction.createRecord(App.Baz);

//later
fooTransaction = App.store.transaction();
foo = fooTransaction.createRecord(App.Foo);

//later
foo.get('bars').addObject(bar);
foo.get('bazes').addObject(baz);
fooTransaction.commit();

1回のPOSTリクエストで親レコードとすべての子レコードを保存できるかどうかを知りたいだけですか?今のところ、子レコードごとに個別に1つのPOSTリクエストを作成しています。

4

1 に答える 1

2

あなたの問題は、埋め込まれたレコードをマッピングする古い方法にあると思います。これは以前はシリアライザーで発生していましたが、現在はアダプターのmap()で発生しています...

ここで統合テストを見ることができます:https ://github.com/emberjs/data/blob/master/packages/ember-data/tests/integration/embedded/embedded_saving_test.js#L50

私はこれらの線に沿った何かがうまくいくと思います:

App.Foo = DS.Model.extend({
  bars: DS.hasMany('App.Bar'),
  bazes: DS.hasMany('App.Baz')
});

App.Bar = DS.Model.extend({
  foo: DS.belongsTo('App.Foo')
});

App.Baz = DS.Model.extend({
  foo: DS.belongsTo('App.Foo')
});

App.Adapter = DS.RESTAdapter.extend({..configs..});

App.Adapter.map('App.Foo', {
  bars:{embedded: 'always'},
  bazes:{embedded: 'always'}
})

これはPOST、次のAPIに対応する必要がありapi.com/fooます。barsbazes

于 2013-03-01T03:31:21.143 に答える