このスタック オーバーフローの質問に似た問題がありますが、答えが機能していないようです。ユーザーが可変数のサブモデルを持つコンテナー モジュールを作成するフォームがあります。フォームが送信されたら、コンテナーとサブモデルを保存し、hasMany 関係が維持されるようにする必要があります。私のコード(Ember-Cliを使用):
コンテナ:
var Container= DS.Model.extend({
name: DS.attr('string'),
submodels: DS.hasMany('submodel'),
lastModified: DS.attr('date')
});
export default Container;
サブモデル:
var Submodel= DS.Model.extend({
char: DS.belongsTo('container'),
name: DS.attr('string'),
desc: DS.attr('string'),
priority: DS.attr('number'),
effort: DS.attr('number'),
time: DS.attr('number')
});
export default Submodel;
ContainersNewRoute:
export default Ember.Route.extend({
model: function() {
return this.store.createRecord('container', {
...
});
}
});
ContainersNewController:
export default Ember.ObjectController.extend({
actions: {
addSubmodel: function() {
var submodels= this.get('model.submodels');
submodels.addObject(this.store.createRecord('submodel', {
...
}));
},
saveNewContainer: function () {
var container = this.get('model');
container.save().then(function(){
var promises = Ember.A();
container.get('submodels').forEach(function(item){
promises.push(item.save);
console.log(item);
});
Ember.RSVP.Promise.all(promises).then(function(resolvedPromises){
alert('all saved');
});
});
this.transitionToRoute(...);
}
}
});
Ember Data 自体は正常に動作し、作成されたコンテナーのビューに遷移し、サブモデルがリストされます。ページを更新すると、サブモデルがコンテナー ビューから消えます。
たとえば、スタック オーバーフローの回答の addObject ではなく pushObject を使用するなど、いくつかのバリエーションを試しました。また、サブモデルが保存された後、Ember.RSVP コールバックを使用して container.save() をもう一度実行しようとしました。
さらにテストを行った結果、サブモデルがまったく保持されていないことがわかりました。
1) コンテナー 2) サブモデル 3) hasMany/belongsTo 関係を相互に保存する適切な方法はありますか?
それとも、コンテナを保存し、サブモデルを保存し、サブモデルをコンテナにプッシュして hasMany 関係を取得してコンテナを再保存し、最後にサブモデルをコンテナに所属させて保存するという個別のステップに分割する必要がありますか?またサブモデル?