1

我有以下型号:

App.Offers = DS.Model.extend({
   name: DS.attr('string'),            
   createdBy: DS.belongsTo('App.Users'),
   products: DS.hasMany('App.Products'), 
   startDate: DS.attr('string'),
   endDate: DS.attr('string')
}

App.Products = DS.Model.extend({
    description: DS.attr('string'),
    img: DS.attr('string'),
    offer: DS.belongsTo('App.Offers'),
}

使用这两个模型,我创建了一个报价(父)和一个产品(子):

var offer = App.Offers.createRecord({/*fields*/}),
    product = App.Products.createRecord({/*fields*/});
offer.get('products').pushObject(product);
offer.get("store").commit();

当我这样做时,问题是父母需要孩子的id,孩子需要父母的id才能设置它的FK。

我在 ember-data 存储库中查找了问题和 PR,发现了这个:https ://github.com/emberjs/data/pull/440 。它建议将 createRecord 包装在 waitForParents 函数中,该函数基本上创建父项,然后创建子项。虽然我尝试了他们的建议,但我仍然无法创建我的记录。问题是,即使先请求父级,它仍然需要子级的 id(尚未创建)。父请求使用以下有效负载发送:

{/*other_fields*/,"products":["/api/v1/products//"]}

请注意 url 中缺少的产品 ID。

4

1 回答 1

0

我设法通过遵循此 PR 中的建议来修复它:https ://github.com/emberjs/data/issues/437 。他们基本上建议创建一个 waitForParents 函数并将其包装在 createRecord 周围。该函数检查是否存在belongsTo 关系并将该创建的代码执行推迟到创建父级(通过将观察者添加到id 字段)。

就我而言,我还必须在序列化程序中覆盖 addHasMany。

我希望这可以帮助其他有同样问题的人。

于 2013-03-20T12:12:13.190 回答