我有三种模式:公司,人和任务。一家公司有很多人。一个人有一家公司。公司有很多任务。一个人有很多任务。
任务关系是多态的。
以下是我的模特
App.Taskable = DS.Model.extend({
tasks: DS.hasMany('task')
});
App.Task = DS.Model.extend({
subject: DS.attr('string'),
taskable: DS.belongsTo('taskable', { polymorphic: true})
});
App.Person = App.Taskable.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
email: DS.attr('string'),
company: DS.belongsTo('company'),
fullName: function() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('firstName', 'lastName')
});
App.Company = App.Taskable.extend({
name: DS.attr('string'),
people: DS.hasMany('person')
});
请注意人和公司扩展可执行。我相信我已正确定义了这些关系。我不知道如何延迟加载任务。
这是我的观点
<script type="text/x-handlebars" data-template-name='show/_person'>
<div>
<form class="form-horizontal" role="form">
<div class="form-group">
<label class="col-sm-2 control-label">Name</label>
<div class="col-sm-10">
<p class="form-control-static">{{fullName}}</p>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Company</label>
<div class="col-sm-10">
<p class="form-control-static">{{company.name}}</p>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Tasks</label>
<div class="col-sm-10">
<p class="form-control-static">
{{#each task in tasks}}
{{task.subject}}<br />
{{/each}}
</p>
</div>
</div>
</script>
为与该人员相关联的公司发出GET请求,但不会请求任务。我如何获得与个人或公司相关的任务?我希望向people/3/tasks
或类似的
答案 0 :(得分:4)
我认为只有ActiveModelAdapter
已经实现了多态关联。
要使其正常工作,您需要使用以下格式:
GET /tasks
{
tasks: [
{
id: 1,
subject: 'Mytask1',
// in the polymorphic association we need to say the type and the id
taskable: { type: "person", id: 1 }
},
{
id: 2,
subject: 'Mytask2',
taskable: { type: "company", id: 1 }
}
]
}
GET /tasks/1
{
task: {
id: 1,
subject: 'Mytask1',
// in the polymorphic association we need to say the type and the id
taskable: { type: "person", id: 1 }
}
}
我用小提琴更新你的样本请看看http://jsfiddle.net/marciojunior/7k7RT/