名为;“类型”;在Ember数据中具有RESTSerializer的嵌入式记录上-错误未找到模型

名为;“类型”;在Ember数据中具有RESTSerializer的嵌入式记录上-错误未找到模型,rest,serialization,ember.js,ember-data,Rest,Serialization,Ember.js,Ember Data,我使用余烬数据1.13.4 我有一个带有一些嵌入式记录的模型,假设它们看起来像这样: var Partner = DS.Model.extend({ name: DS.attr(), addresses: DS.hasMany('address', { async: false } ), }); var Address = DS.Model.extend({ type: DS.attr(), zip: DS.attr(), city: DS.attr(), street

我使用余烬数据1.13.4

我有一个带有一些嵌入式记录的模型,假设它们看起来像这样:

var Partner = DS.Model.extend({
  name: DS.attr(),
  addresses: DS.hasMany('address', { async: false } ),
});

var Address = DS.Model.extend({
  type: DS.attr(),
  zip: DS.attr(),
  city: DS.attr(),
  street: DS.attr()
});
API发回嵌入在
合作伙伴
记录中的
地址
记录。答复示例:

{
  "partners": [
    {
      "id": 47,
      "name": "Johnny",
      "addresses": [
        {
          "id": 7,
          "type": "MAIN",
          "zip": "1234",
          "city": "City-X",
          "street": "6. Nowhere"
        }
      ],
    },
  ]
}
问题是
Address
模型上的
type
只是一个普通属性,但Ember Data希望它是嵌入式模型的类型,我得到以下断言消息:

Error: No model was found for 'MAIN' 
其中,
'MAIN'
类型
属性的内容

我不能改变API发回数据的方式,我需要适应它

我该怎么做

编辑:我第一次忘记包括的重要细节。
API有一个
/partners/search
端点,我通过一个直接的ajax请求访问它,然后我(应该)需要调用
this.store.pushMany('partner',this.store.normalize('partner',response.partners))这是当“MAIN”的
未找到模型时引发的

您的
{partners:{addresses:[…]}}
正在返回一个嵌入的数据,但是因为您提供的对象具有
id
type
ember数据,所以理解api返回一个多态关联。并试图找到名为
MAIN
的模型,但由于该模型不存在
错误:未找到“MAIN”的模型

为了告诉ember数据您的关系已嵌入,您需要覆盖
PartnerSerializer
,并包括


运行
{partners:{addresses:[…]}}
的此示例的实时演示将返回嵌入的数据,但由于您提供的对象具有
id
type
ember数据,因此理解api返回多态关联。并试图找到名为
MAIN
的模型,但由于该模型不存在
错误:未找到“MAIN”的模型

为了告诉ember数据您的关系已嵌入,您需要覆盖
PartnerSerializer
,并包括


此示例的实时演示正在运行

,这也是我找到的解决方案。但是我忘了包括一个非常重要的细节:API有一个
/partners/search
端点,我通过直接的ajax请求访问它,然后我(应该)需要调用
this.store.pushMany('partner',this.store.normalize('partner',response.partners))
这是当“MAIN”的
没有找到模型的时候被提出的。这就是我也找到的解决方案。但是我忘了包括一个非常重要的细节:API有一个
/partners/search
端点,我通过直接的ajax请求访问它,然后我(应该)需要调用
this.store.pushMany('partner',this.store.normalize('partner',response.partners))这是当“MAIN”的
未找到模型时引发的。
App.ApplicationAdapter= DS.RESTAdapter;
App.ApplicationSerializer = DS.RESTSerializer;
App.PartnerSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    addresses: { embedded: 'always' }
  }
})