Ember创建了一个多态记录

时间:2014-07-23 20:41:04

标签: javascript ruby-on-rails ember.js polymorphism ember-data

我正在尝试为具有多态关系的模型创建记录。

以下是模型:

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中创建记录。

http://jsbin.com/qebis/6/

我是如何实现这一目标的?我查看了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

2 个答案:

答案 0 :(得分:4)

对于那些使用ember-cli的人,请注意MODEL_FACTORY_INJECTIONS = true阻止模型继承从Ember Data : 1.0.0-beta.11开始为多态关系工作。

请参阅https://github.com/emberjs/data/issues/2065

答案 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')
});