我正在尝试为具有多态关系的模型创建记录。
以下是模型:
App.SupportedTransportationMethod = DS.Model.extend({
resource: DS.belongsTo('resource', { polymorphic: true }),
transportationMethod: DS.belongsTo('transportationMethod')
});
我试图用以下方式创建记录的模型:
App.Contact = DS.Model.extend({
supportedTransportationMethods: DS.hasMany('supportedTransportationMethod', { async: true }),
companyName: DS.attr('string')
});
在这里,我正在尝试创建一条记录:
supportedTransportationMethod = this.store.createRecord('supportedTransportationMethod', {
transportationMethod: transportationMethod,
resource: contact
});
但我得到一个断言错误:
Uncaught Error: Assertion Failed: You can only add a 'resource' record to this relationship
我有一个jsbin显示这个。如果单击其中一个复选框,则会收到错误。我正在尝试在CheckboxItemController中创建记录。
我是如何实现这一目标的?我查看了this SO,但是动态创建的地方并不顺利,你不知道id会是什么。推动感觉也不正确。
更新:
如果我使用ember-data prod版本,它允许创建(因为断言是代码从prod版本中删除)。所以我想知道这是否是断言代码中的错误?
Ember.assert("You can only add a '" + type + "' record to this relationship", !value || value instanceof typeClass);
但它确实创建了类型设置为当前模型类型,即使它是从基础模型扩展。不确定这是不是一件好事......
更新2:
这是另一个显示上一次更新效果的jsbin。 http://jsbin.com/qebis/7/edit
答案 0 :(得分:4)
对于那些使用ember-cli
的人,请注意MODEL_FACTORY_INJECTIONS = true
阻止模型继承从Ember Data : 1.0.0-beta.11
开始为多态关系工作。
答案 1 :(得分:2)
Ember Data希望记录从同一个基类继承。在您的情况下,您指定resource
,但似乎您没有将其定义为DS.Model
。
你应该有类似的东西:
App.Resource = DS.Model.extend();
App.Contact = App.Resource.extend({
supportedTransportationMethods: DS.hasMany('supportedTransportationMethod', { async: true }),
companyName: DS.attr('string')
});