我有兩種模式。不能保存hasMany/belongsTo關係如果兩者都是新的Ember-Data
App.Request = DS.Model.extend({
materials: DS.hasMany('App.Material')
});
App.Material = DS.Model.extend({
request: DS.belongsTo('Mat.Request')
});
在表單創建的請求,我創建了一個新的請求:
App.Request.createRecord();
,並將其綁定到表單的字段。要創建新材質,請單擊一個按鈕並顯示一個模態。當模態出現,它創建的請求的材料陣列中的一種新材料:(材料模有其自己的控制器,所以我必須要去RequestsNewController得到請求。)
this.get('controllers.requestsNew.materials').createRecord();
耶!有用。我可以在請求中添加很多材料,UI正在更新以顯示正在創建關聯。真棒!直到...我打的保存按鈕,呼籲從RequestsNewController此代碼:
this.get('transaction').commit();
現在,我已經添加到我的請求,材料被撕掉(該模板,顯示在該部分材料請求現在顯示沒有材料。)
這是我的代碼的一個非常簡化的版本,但重要的是,一切看起來不錯,直到我提交數據到服務器。我有一個關於發生了什麼的理論,但我不知道如何解決它!順便說一下,我在後端使用了主動模型串行器的Rails。
當我調用commit時,其他適配器首先POST到/ requests。記錄被添加,並且我從服務器得到以下內容:
{
"request": {
"id": 30,
"material_ids": []
}
}
Yay!我的請求已保存,並且我現在有一個來自服務器的ID。
接着,REST適配器的POST /材料和它發送以下JSON:
{
"material": {
"request_id": 0,
}
}
並且服務器響應,給予材料的ID。
但這是什麼? REST適配器正在發送request_id:0,而不是request_id:30像它應該那樣?
這是我的理論:請求保存後,服務器響應一個空的material_ids數組。這很有道理!我們還沒有將材料發送到服務器,因爲我們首先需要請求ID!但是,當Ember Data看到一個空的material_id數組時,它將從請求中刪除材料。然後,當材料保存時,他們不再有請求,因此request_id:0.
當我創建沒有材料的請求時,提交,添加材料,提交,它的工作原理!
我在做什麼錯?
謝謝!
我有一個類似的問題,可能你也許告訴你如何可以添加多個材料?我似乎無法得到它的工作。這將非常有幫助。 – Markus