2013-02-28 118 views
1

這是一個關於我的理解的問題。Ember數據有很多關係

在Rails中,當您在兩個模型(父級和子級)之間設置has_many-belongs_to關聯時,該ID僅存儲在子級上。如果您想查找孩子的父母,則使用孩子上的ID查詢數據庫。要查找所有父母子女,將查詢所有具有與當前父母匹配的parent_id的記錄。 Rails是我的後端,所以這是ember-data與之交互的東西。

ember-data中的關聯似乎需要在兩種模型中都設置兩種方式和id。具有has_many關係的模型應該包含一個包含其子標識符的數組。但是,這不存儲在服務器端。

客戶端使用餘燼,我需要能夠列出一個父母的孩子。但是,如果不爲所有父母都迭代所有孩子,我無法訪問此內容。

這裏有一個基本的不匹配,我只是想確保我正確實施我的應用程序。我的ajax是否應該爲每個父項返回一個ID數組?我應該在客戶端填寫這些數據嗎?

回答

4

在您的JSON中包含ids陣列的hasMany關係嚴格來說是可選的。在實踐中,它是至關重要的,因爲沒有它,Ember-Data將只能找到那些已經加載的關聯記錄。

舉例來說,如果你有

App.Post = DS.Model.extend({ 
    comments: DS.hasMany('App.Comment') 
}); 

App.Comment = DS.Model.extend({ 
    post: DS.belongsTo('App.Post') 
}); 

並且省略comment_ids陣列中的post JSON,那麼你需要手動調用App.Comment.find()加載所有評論之前post.get('comments')將保證包含所有的與給定的post相關的評論。

如果您在post的JSON中包含comment_ids陣列,則Ember-Data將對其尚未加載的評論發出後續請求。

+0

好吧,設置JSON響應以包含ID似乎足夠直接。怎麼樣保存回服務器?客戶端是否會發送評論數組而忽略或者您是否可以阻止發送它? – 2013-03-01 04:54:33

+1

默認情況下,僅當關系配置爲嵌入到序列化程序中時,Ember-data纔會包含comments數組。看看[這個問題](http://stackoverflow.com/questions/15138219/ember-data-saving-a-關係/ 15145803#15145803)瞭解更多信息。 – ahmacleod 2013-03-01 16:26:37

+0

完美。所以總是默認似乎已經做我需要的東西。三天進入餘燼(和數據),不得不說我很喜歡它。 – 2013-03-01 16:45:21