Many to Many Relationships with Ember, ember-data and Rails

拥有回忆 提交于 2019-11-27 22:28:25

Despite the fact that it's possible to set up matching hasMany relationships, Ember Data doesn't actually support many to many relationships yet (see this issue). What you can do for now is decompose the relationship using a membership model.

App.User = DS.Model.extend
  rosterMemberships: DS.hasMany 'App.RosterMembership'      

App.RosterMembership = DS.Model.extend
  user: DS.belongsTo 'App.User'
  roster: DS.belongsTo 'App.Roster'

App.Roster = DS.Model.extend
  rosterMemberships: DS.hasMany 'App.RosterMembership'

Now you can use createRecord() and deleteRecord() with the membership model to add and delete relationships.

Unfortunately, in this example, it's not so easy to bind to the collection of rosters for a particular user. One work-around is as follows:

App.User = DS.Model.extend
  rosterMemberships: DS.hasMany 'App.RosterMembership'
  rosters: ( ->
    @get('rosterMemberships').getEach('user')
  ).property 'rosterMemberships.@each.relationshipsLoaded'

App.RosterMembership = DS.Model.extend
  user: DS.belongsTo 'App.User'
  roster: DS.belongsTo 'App.Roster'
  relationshipsLoaded: ( ->
    @get('user.isLoaded') and @get('roster.isLoaded')
  ).property 'user.isLoaded', 'roster.isLoaded'

If you bind to user.rosters, then your template should update when relationships are created or destroyed.

Alternate solution:

App.Roster = DS.Model.extend
  users_map: DS.attr('array')
  users: DS.hasMany 'App.User'

  users_change: (->
    @set('users_map', @get('users').map((el) -> el.id).toArray())
  ).observes('users.@each')

to server in POST data will sending array of users ids

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!