在Ember数据中有多种多态关系

时间:2014-11-02 17:45:01

标签: ember.js ember-data

我真的很难理解Ember Data(Beta 11)中的多态关系如何蠕虫,并且无法找到有关如何设置它们以及JSON有效负载中预期的更新信息。我正在尝试创建一个项目源(想想facebook feed),其中您在Feed中有不同类型的项目。我的建模看起来如下所示。

App.Feedable = DS.Model.extend({
 activities: DS.hasMany('activity')
});

App.Activity = DS.Model.extend({
 feedable: DS.belongsTo('feedable', { polymorphic: true, async: false })
});

App.MemberLikeShare = DS.Model.extend({
 status: DS.attr('string')
});

App.PhotoShare = DS.Model.extend({
 status: DS.attr('string'),
 photo: DS.attr('string')
});

当我在/activities进行抓取时,我发回的JSON如下所示:

{
  activities: [
    {
      id: 1,
      feedable: {  id: 1, type: 'memberLikeShare' }
    },
    {
     id: 4,
     feedable: { id: 4, type: 'memberLikeShare' }
    },
    {
      id: 5,
      feedable: { id: 5, type: 'photoShare' }
    }
  ],

  member_like_shares: [
    {
      id: 1,
      status: 'Foo'
    },
    {
     id: 4,
     status: 'Bar'
    }
  ],
  photo_shares: [
    {id: 5, photo: 'example.jpg'}
  ]
}

当这次运行时,我收到如下错误:

You can only add a 'feedable' record to this relationship Error: Assertion Failed: You can only add a 'feedable' record to this relationship

我假设我的人际关系错误或者我发错了JSON?

1 个答案:

答案 0 :(得分:0)

多态关系应该扩展基类型。

App.Feedable = DS.Model.extend({
 activities: DS.hasMany('activity')
});

App.MemberLikeShare = App.Feedable.extend({
 status: DS.attr('string')
});

App.PhotoShare = App.Feedable.extend({
 status: DS.attr('string'),
 photo: DS.attr('string')
});

我也期望他们定义活动。

 member_like_shares: [
    {
      id: 1,
      status: 'Foo',
      activites: [1,2,3,4]
    },
    {
     id: 4,
     status: 'Bar',
      activites: [1,2,3,4]
    }
  ],
  photo_shares: [
    {
      id: 5, 
      photo: 'example.jpg',
      activites: [1,2,3,4]
    }
  ]