假设我有两个Ember数据模型:competition
和participant
我的竞赛模型存储以下数据:date
,first
,second
和third
。 first
,second
和third
属性都会存储排在第一,第二和第三位的独特竞争对手的ID。
我的participant
模型存储以下数据:name
,surname
和competition
参赛者只参加一场比赛,因此participant
模型在hasMany
上不需要competition
关系。
如何在Ember数据中对此进行建模?
这是我认为可行的方法:
// app/models/competition.js
export default DS.Model.extend({
rev: DS.attr('string'),
date: DS.attr('date', {defaultValue: function() { return new Date(); }}),
first: DS.belongsTo('participant'),
second: DS.belongsTo('participant'),
third: DS.belongsTo('participant')
});
// app/models/participant.js
export default DS.Model.extend({
rev: DS.attr('string'),
name: DS.attr('string'),
surname: DS.attr('string'),
competition: DS.belongsTo('competition')
});
问题是competition
上的participant.js
密钥需要明确的反转,并且无法知道它可能与competition
上的三个密钥中的哪一个相关联
我应该如何指定我的反转? competition
和participant
模型都需要明确的反转吗?如果是这样,它们应该是什么?这种数据结构在Ember Data中是否可行?我应该完全采用不同的方法吗?
请权衡。我已经把这个问题转过头来了几个小时,我的解决方法都没有成功。
答案 0 :(得分:0)
我自己还没有使用过ember-data多态关联,但我相信一个多态的belongsTo关联可能适合你的需求。我的答案改编自blog post 。另请查看以下两个教程:http://www.toptal.com/emberjs/a-thorough-guide-to-ember-data和http://blog.unspace.ca/post/107228551852/luke-galea-on-ember-data-polymorphic-associations
//app/models/competition.js
export default DS.Model.extend({
rev: DS.attr('string'),
date: DS.attr('date', {defaultValue: function() { return new Date(); }}),
participant: DS.belongsTo("particpant", {polymorphic: true, async: true})
});
// app/models/participant.js
export default DS.Model.extend({
rev: DS.attr('string'),
name: DS.attr('string'),
surname: DS.attr('string'),
competition: DS.belongsTo('competition')
});
// app/models/first.js
import Participant from '../participant';
export default Participant.extend({
});
// app/models/second.js
import Participant from '../participant';
export default Participant.extend({
});