2014-01-21 40 views
1

我試圖在Ember中實現一個多才多藝的關係系統。我的模型是:Ember-數據與多對多關係的奇怪行爲

App.User = DS.Model.extend 
    name: DS.attr('string') 
    friendships: DS.hasMany('friendship', { inverse: 'user' }) 

App.Friendship = DS.Model.extend 
    user: DS.belongsTo('user') 
    friend: DS.belongsTo('user') 

在我的用戶控制,我有一個addFriend動作,看起來大致是這樣的(我有從其他地方定義currentUser):

App.UserController = Ember.ObjectController.extend 
    actions: 
    addFriend: -> 
     friendship = @get('store').createRecord('friendship', 
     user: @get('currentUser') 
     friend: @get('model') 
    ) 
     @get('currentUser.friendships').pushObject(friendship) 

從調試語句,它似乎像friendship記錄正被推入friendships陣列BOTHcurrentUser和用戶代表model。我不希望發生這種情況,因爲對於雙向交友系統,model.friendship陣列應該包含friendship的倒數,即交換用戶和好友。當然,如果Ember有辦法自動執行此操作,那將會很好,但我也很樂意手動執行此操作。

現在,爲什麼pushObject方法將相同的friendship記錄推送到兩個用戶記錄中?我想這可能與模型中定義逆向的方式有關。我嘗試更改爲inverse: null,但這並未解決問題。引發這種行爲的引擎數據引發了什麼?或者我的代碼中有一個我沒有看到的錯誤?任何方式擺脫這種行爲將非常感激!

回答

1

解決!事實證明,我需要

App.Friendship = DS.Model.extend 
    user: DS.belongsTo('user') 
    friend: DS.belongsTo('user', { inverse: null }) 

我是憑直覺正確的答案必須是與逆,但我並沒有把inverse: null在正確的位置在第一!