Ember Data无法识别JSON响应中的ID(与继承相关)

时间:2018-01-31 21:05:35

标签: json inheritance ember.js ember-data rails-api

在过去的几个小时里,我一直试图解决这个问题,我认为最好在这一点上寻求帮助。

我正在创建新记录(例如,新的ProducerObjectiveOutcome记录)。在我的Ember应用程序将表单中的数据发布到我的Rails API之后,抛出以下错误:

  

断言失败:您的结果记录已保存到服务器,但响应没有ID,并且客户端没有设置ID。记录必须有ID。请更新服务器响应以在响应中提供id或在保存记录之前或在规范响应时在客户端生成id。

奇怪的是我的API返回带有ID的JSON响应(见下文)。

{
  "producer_objective_outcome": {
    "id":27,
    "type":"ProducerObjectiveOutcome",
    "title":"New outcome",
    "owner": {
      "id":6
    }
  }
}

正如您可能已经提到的那样,ProducerObjectiveOutcomeOutcome的子类。

在我的Ember App和Rails API中,我已设置ProducerObjectiveOutcomeOutcome继承。在我的Ember App中,这就是模型的样子:

// app/models/producer-objective-outcome.js

import Outcome from "./outcome";

export default Outcome.extend({

});

没有什么花哨的东西在这里 - 我认为这一切都很直接 - 但由于某种原因,这个错误即将到来。我希望你们中的一个人可以帮助我解决这个问题!

提前致谢!

1 个答案:

答案 0 :(得分:1)

对于任何感兴趣的人,我通过将JSON响应的根节点的名称更改为outcome而不是producer_objective_outcome来解决此问题。

在我之前的解释中可能有帮助的是,ProducerObjectiveOutcome记录是在以下路线创建的:producer/objective/:id/outcome/new

这个URI的关键部分,正如我刚刚想到的那样,是.../outcome/...部分。我没有测试过,但是考虑到Ember中的约定,我怀疑如果那个URI是.../producer-objective-outcome/...那么一切都会变得笨拙。

TL; DR:JSON有效负载中的名称应与路由匹配。