2014-06-18 42 views
4

我一直在這個問題上停留了一段時間。我徹底研究了stackoverflow上的問題,無法找到解決方案。Ember-data「斷言失敗:錯誤:斷言失敗:來自findAll的響應必須是數組,但不確定」

我正在嘗試使用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調試器不是很有幫助。任何幫助將超級讚賞。

讓我知道是否有更多的信息會有所幫助。

+0

什麼是從服務器的響應時,它請求圖表信息,或者它不這樣做呢? – Kingpin2k

+0

在點擊報告之前,它不應該請求任何圖表數據。所以它沒有提出這樣的要求。 –

+0

你沒有在模板中引用它,或者你是什麼? – Kingpin2k

回答

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 }) 
}); 

你不返回阿賈克斯。

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

+0

不幸的是,我仍然得到同樣的錯誤。通過查看ember的文檔,它看起來像ActiveModelAdapter應該處理任何的軌道,以增加不協調。 會被包括在內嗎?或者這是將來需要注意的事項? –

+0

對不起,我跑去吃午飯,你真的有一個整數轉換? – Kingpin2k

+1

返回ajax解決了這個問題!非常感謝! –