我在後端使用了ember-data和activemodel適配器,其中包含rails和mongoid(mongodb)。每當我做我的rails應用程序的請求,emberjs顯示返回的數據,但在Chrome開發者控制檯,它顯示:ember-data-1.0.0 activemodeladapter錯誤包括傳遞給`push`的散列中的`id`
Assertion failed: You must include an `id` in a hash passed to `push`
中的jsfiddle
重現的問題,我已經在這個問題再次出現, jsfiddle。您可以看到不同版本的jsfiddle當我使用ID而不是_id。後端發出
有效載荷
適配器加載ActiveModel轉換snake_case 起始日期駱駝情況。我已經添加了一些自定義代碼到ember-data rest-serializer來將_id轉換爲id並且該代碼在此問題中被粘貼更低。
{"schedules":[
{
"_id":"529f38596170700787000000",
"name":"Hair styling",
"start_date":"2013-12-12"
}
]}
現在雖然回到有效載荷包括ID,如果我進入谷歌cgrome控制檯並運行以下commmands並訪問_data,它顯示了ID是不確定的。
a = App.__container__.lookup("controller:schedules")
b = a.get('content')
I F使用本公開箭頭控制檯和挖入_dat對象,這是我看到
_data: Object
id: undefined
自定義序列碼
我延長了activemodeladapter將mongodb的_id轉換爲id並將其設置爲主鍵。
App.ApplicationSerializer = DS.ActiveModelSerializer.extend({
primaryKey: '_id',
normalize: function(type, hash, prop) {
this.normalizeMongoidId(hash);
return this._super(type, hash, prop);
},
normalizeMongoidId: function(hash){
var json = { id: hash._id };
delete hash._id;
//hash.id = hash._id;
//delete hash._id;
}
/*
serialize: function(record, options){
var json = this._super(record, options);
json.schedule._id = json.record.id;
delete json.record.id
return json;
}
*/
});
餘燼的數據模型:
App.Schedule = DS.Model.extend({
name: DS.attr('string'),
organization: DS.belongsTo('organization')
});
這裏是我的emberjs路由器
App.Router.map(function(){
this.resource('schedules', {path: "/schedules"}, function(){
this.resource('schedule', {path: "/:schedule_id"}, function(){});
});
});
的emberjs路線界定及:
個App.SchedulesRoute = Ember.Route.extend({
model: function(){
return this.store.find('schedule');
}
});
emberjs堆棧跟蹤
Assertion failed: You must include an `id` in a hash passed to `push` application.js:31601
(anonymous function) application.js:31601
Ember.assert application.js:28431
DS.Store.Ember.Object.extend.push application.js:69415
(anonymous function) application.js:69483
Ember.EnumerableUtils.map application.js:30115
DS.Store.Ember.Object.extend.pushMany application.js:69482
(anonymous function) application.js:69839
invokeCallback application.js:36783
(anonymous function) application.js:36838
EventTarget.trigger application.js:36621
(anonymous function) application.js:36921
DeferredActionQueues.flush application.js:34001
Backburner.end application.js:34092
Backburner.run application.js:34131
Ember.run application.js:34489
hash.success application.js:74468
fire application.js:3049
self.fireWith application.js:3161
done application.js:8236
callback
感謝
你可以給服務器給瀏覽器的錯誤和響應的完整堆棧跟蹤 – Hardik127
該燼錯誤是奇怪的,但從你看到的日誌看起來像錯誤是在Rails服務器(迴應錯誤500),請你請給我們你的'schedulers_controller.rb'? –
@AdrienCoquio將完整的** schedules_controller.rb **粘貼在標題爲**從emberjs到rails ** – brg