一个资源的路由返回两个记录而不是一个

时间:2014-01-04 18:02:29

标签: ember.js ember-data ember-router

在我的应用程序中,我希望路由到资源“day”,像这样“sampledomain.com/day/1-3-2014”。

我这样定义:

this.resource('day', { path: '/day/:day_date' });

我对该路线的模型钩子如下所示:

model: function(params) {
    return this.store.find('day', params.day_date);
},

我的API响应如下:

{"day":{"id":"3","dayDate":"2014-03-01","openTime":null,"closeTime":null}}

出于某种原因,我在商店里收到两条记录。一个是正​​确的,一个id设置为URL(1-3-2014)中的动态部分,其余的模型数据为空。

我不知道我做错了什么。

2 个答案:

答案 0 :(得分:2)

您应该使用findQuery并返回promise resolve handler中的第一条记录:

App.DayRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('day', { date: params.day_date }).then(function(days) {
      return days.toArray()[0];
    });
  }
});

答案 1 :(得分:0)

您假装日期是ID,因此Ember Data正在根据标识1-3-2014构建记录,然后您的服务器返回ID为3的记录。所以这就引出了一个问题,即id?

如果dayDate可以是id,那么记录的primaryKey应该改变,如果不能,那么你真的应该使用findQuery(或找到一个对象)。

return this.store.find('day', {dayDate: params.day_date});

这会将您的结果集更改为集合,因为您不是通过id,它不再保证是单个实例。

此外,获取请求将是不同的