在过去的几个小时里,我一直试图解决这个问题,我认为最好在这一点上寻求帮助。
我正在创建新记录(例如,新的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
}
}
}
正如您可能已经提到的那样,ProducerObjectiveOutcome
是Outcome
的子类。
在我的Ember App和Rails API中,我已设置ProducerObjectiveOutcome
从Outcome
继承。在我的Ember App中,这就是模型的样子:
// app/models/producer-objective-outcome.js
import Outcome from "./outcome";
export default Outcome.extend({
});
没有什么花哨的东西在这里 - 我认为这一切都很直接 - 但由于某种原因,这个错误即将到来。我希望你们中的一个人可以帮助我解决这个问题!
提前致谢!
答案 0 :(得分:1)
对于任何感兴趣的人,我通过将JSON响应的根节点的名称更改为outcome
而不是producer_objective_outcome
来解决此问题。
在我之前的解释中可能有帮助的是,ProducerObjectiveOutcome
记录是在以下路线创建的:producer/objective/:id/outcome/new
。
这个URI的关键部分,正如我刚刚想到的那样,是.../outcome/...
部分。我没有测试过,但是考虑到Ember中的约定,我怀疑如果那个URI是.../producer-objective-outcome/...
那么一切都会变得笨拙。
TL; DR:JSON有效负载中的名称应与路由匹配。