处理路由时出错:...断言失败:您尝试使用类型推送数据...但是找不到具有该名称的模型

时间:2017-06-16 01:27:16

标签: ember.js json-api

我使用Ember和JSONAPI在关系/包含和序列化方面遇到了一些问题。

我有一条路线可以显示病人的信息:

import Ember from 'ember';

export default Ember.Route.extend({
  model(params){
    return this.store.find('patient', params.patient_id);
  }
});

我有两个模型:

patient

import DS from 'ember-data';

export default DS.Model.extend(validations, {
  name : DS.attr('string'),
  email : DS.attr('string'),
  gender : DS.attr('string'),
  birthDate : DS.attr('date'),
  description : DS.attr('string'),
  anamnesis : DS.belongsTo('anamnesis')
});

anamnesis

import DS from 'ember-data';

export default DS.Model.extend({
  smokes : DS.attr('boolean'),
  drinks : DS.attr('boolean'),
  drugUser : DS.attr('boolean')
});

如你所见,我与他们之间有一对一的关系。

现在,我从Ruby on Rails后端获得了这个JSONAPI响应

{  
  "data":{  
    "id":"3",
    "type":"patients",
    "attributes":{  
        "name":"paciente 3",
        "gender":"female",
        "email":"teste3@teste.com",
        "birth-date":"2017-06-04T02:59:37.435Z"
    },
    "relationships":{  
      "anamnesis":{  
        "data":{  
          "id":"2",
          "type":"anamneses"
        }
      }
    }
  },
  "included":[  
    {  
      "id":"2",
      "type":"anamneses",
      "attributes":{  
        "smokes":null,
        "drinks":null,
        "drug-user":null
      }
    }
  ]
}

尝试序列化relationshipincluded时,它会查找anamnese(来自后端的响应类型anamneses)模型,而不是{{1 }}。

anamnesis

所以我必须创建一个Error while processing route: ... Cannot read property 'type' of null TypeError: Cannot read property 'type' of null来解决这个问题:

PatientSerializer

我知道这可能不是最好的解决方案,但我甚至无法尝试别的东西,因为它现在向我显示了这个错误:

import DS from 'ember-data'; import Ember from 'ember'; export default DS.JSONAPISerializer.extend({ modelNameFromPayloadKey(payloadKey){ if(payloadKey === 'anamneses'){ return 'anamnesis'; } else { return this._super(payloadKey); } }, modelNameFromPayloadType(payloadType){ if(payloadKey === 'anamneses'){ return 'anamnesis'; } else { return this._super(payloadType); } }, });

我缺少什么?我修错了吗?

1 个答案:

答案 0 :(得分:1)

  1. anamnesis : DS.belongsTo('anamnesis')更改为anamnesis : DS.belongsTo('anamnese')
  2. 将模型文件名anamnesis更改为anamnese
  3. 您不需要引入Patient序列化程序来更改型号名称。
  4. 上述更改将有效。看看this twiddle

    PS:find在最新版本中已弃用,请考虑findAll