Ember-data“断言失败:错误:断言失败:来自findAll的响应必须是数组,而不是未定义”

时间:2014-06-18 17:15:00

标签: javascript ruby-on-rails json ember.js

我已经在这个问题上停留了很长一段时间了。我已经彻底研究了stackoverflow上的问题,但无法找到解决方案。

我正在尝试使用ember-data和rails API将JSON数据加载到我的应用程序商店中。我正在使用ember-cli。

我继续得到的错误是:Assertion Failed: Error: Assertion Failed: The response from a findAll must be an Array, not undefined

该应用程序由几个报告组成,每个报告都有图表。服务器触发对API的请求(将uuid作为查询字符串添加)并接收以下json响应:

{
    reports: [
        {
            id: 1,
            name: "Report 1",
            description: "Test Report 1",
            display_order: 0,
            chart_ids: [
                1
            ]
        },
        {
            id: 2,
            name: "Report 2",
            description: "Test Report 2",
            display_order: 1,
            chart_ids: [
                5,
                6
            ]
        }
    ]
}

这是报告的路线:

export default Ember.Route.extend({
    setupController: function(controller) {
         controller.set('model', this.store.find('report'));
    }
});

我的模特:

var Report = DS.Model.extend({
    name: DS.attr('string'),
    description: DS.attr('string'),
    displayOrder: DS.attr('integer'),
    charts: DS.hasMany('chart', { async: true })
 });

var Chart = DS.Model.extend({
    reports: DS.belongsTo('report'),
    config: DS.attr()
});

我正在使用ActiveModelAdapter和ActiveModelSerializer:

ApplicationAdapter:

export default DS.ActiveModelAdapter.extend({
    namespace: 'api',
    ajax: function(url, type, hash) {
        if (Ember.isEmpty(hash)) {
            hash = {};
        }

        if (Ember.isEmpty(hash.data)) {
            hash.data = {};
        }

        hash.data.uuid = $.cookie('uuid');
        this._super(url, type, hash);
    }
});

序列化器:

export default DS.ActiveModelSerializer.extend();

此刻我很沮丧。 Ember调试器并不是非常有用。任何帮助都会受到超级赞赏。

如果有更多信息有用,请告诉我。

1 个答案:

答案 0 :(得分:0)

我非常确定报告的JSON响应中需要charts_ids而不是chart_ids(请注意图表后的s)。

或将您的hasMany更改为图表(虽然这看起来很奇怪)

 var Report = DS.Model.extend({
    name: DS.attr('string'),
    description: DS.attr('string'),
    displayOrder: DS.attr('integer'),
    chart: DS.hasMany('chart', { async: true })
 });

你没有归还ajax。

App.ApplicationAdapter= DS.ActiveModelAdapter.extend({
  namespace: 'api',
    ajax: function(url, type, hash) {
        if (Ember.isEmpty(hash)) {
            hash = {};
        }

        if (Ember.isEmpty(hash.data)) {
            hash.data = {};
        }

        hash.data.uuid = $.cookie('uuid');
        return this._super(url, type, hash);
    }
});

http://emberjs.jsbin.com/OxIDiVU/678/edit