我在查询 API 时收到“断言失败:您必须在传递给 `push` 的哈希中包含一个 `id`”
Posted
技术标签:
【中文标题】我在查询 API 时收到“断言失败:您必须在传递给 `push` 的哈希中包含一个 `id`”【英文标题】:I get "Assertion failed: You must include an `id` in a hash passed to `push` " when querying API 【发布时间】:2014-10-21 08:46:33 【问题描述】:我一定已经阅读了关于我的问题的所有关于堆栈溢出的问题,但还没有找到解决方案。 我对 Ember 和 Node 很陌生,所以请多多包涵。
服务器以这种格式响应:
"_id" : "53fddf59d72f9b4d3a3e164a"
"about" : [
"from" : "foo",
"text" : "bar",
... ]
我的模型如下所示:
App.About = DS.Model.extend(
from : DS.attr('string'),
text : DS.attr('string'),
...
适配器和序列化器:
App.ApplicationAdapter = DS.RESTAdapter.extend(
host: 'http://localhost:3000'
);
App.ApplicationSerializer = DS.JSONSerializer.extend(
primaryKey: '_id'
);
还有我的路线:
App.AboutRoute = Ember.Route.extend(
model: function()
return this.store.find('about');
);
使用车把:
<script type="text/x-handlebars" data-template-name="about">
<p>from</p>
</script>
路由会渲染,但是控制台报错:
调试:------------------- ember.js:3285 调试:Ember:1.3.0 ember.js:3285 调试:Ember 数据:1.0.0-beta.5 ember.js:3285 调试:车把:1.3.0 ember.js:3285 调试:jQuery:1.10.2 ember.js:3285 调试:------------------- ember.js:3285 生成 -> route:application Object fullName: "route:application" ember.js:3285断言失败:您必须在传递给
push
ember.js:3285 的哈希中包含id
生成 -> 控制器:关于对象 fullName: "controller:about" ember.js:3285 转换为“关于”
我做错了什么?!
更新:
即使这不是我最终使用的确切格式,也接受了 Kingpin2k 的回答。有关详细信息,请参阅 cmets。
【问题讨论】:
只是猜测,但请尝试将primaryKey
规范放入 AboutSerializer
。
@torazaburo 不应该 ApplicationSerializer 将它应用到整个应用程序?
不知道,试试看。
【参考方案1】:
您的格式应该具有复数类型,以及各个记录上的 id。
"abouts" : [
"from" : "foo",
"text" : "bar",
"_id" : "53fddf59d72f9b4d3a3e164a"
,
"from" : "foo2",
"text" : "bar2",
"_id" : "53fddf59d72f9b4d3a3e164k"
,
... ]
【讨论】:
好的,所以我更改了我的 api 以返回与上面完全相同格式的 json。但是我仍然收到错误Assertion failed: You must include an id in a hash passed to 'push'.
我在序列化程序中遗漏了什么吗?还是模型不对?
Ember 是否要求根对象有想法?
我觉得你混用 JSONAdapter 和 RESTSerializer 很不爽,试试用 RESTAdapter 和 RESTSerializer,emberjs.jsbin.com/OxIDiVU/1011/edit,而且你有两次相同的主键。
当我使用 RESTSerializer 时,我收到“加载路由时出错:TypeError:无法读取未定义的属性 ID”。我也没有重复的 id,你认为你在看上面的答案吗?
我有同样的问题,但我似乎无法解决问题,因为我的 JSON 已经是上面推荐的格式 =/以上是关于我在查询 API 时收到“断言失败:您必须在传递给 `push` 的哈希中包含一个 `id`”的主要内容,如果未能解决你的问题,请参考以下文章
Google Compute Engine:无法从 gcloud 终端查询 API
为啥我在使用 Google Maps API 时没有收到“同源政策”警告?
尝试发布到 API 时,我在 Flutter 中收到“状态”:400 错误
google.api_core.exceptions.ResourceExhausted: 429 查询 bigquery 时收到的消息大于最大值