我无法使用ember-data rev12实现我所理解的多态关系。
我有以下型号:
App.Project = DS.Model.extend
lists: DS.hasMany('App.List', { polymorphic: true })
App.Proposal = DS.Model.extend
lists: DS.hasMany('App.List', { polymorphic: true })
App.Employee = DS.Model.extend
lists: DS.hasMany('App.List', { polymorphic: true })
App.List = DS.Model.extend
name: DS.attr('string')
#project: DS.belongsTo('App.Project', { polymorphic: true })
我正在尝试从项目路由器创建一个新列表,如此。
App.ProjectRoute = Ember.Route.extend
events:
newList: (project) ->
lists = project.get('lists')
list = App.List.createRecord(name: 'list1')
lists.pushObject(list)
@store.commit()
但是对服务器的请求是错误地设置了多态键。
我期待有效载荷看起来像:
{ list: { name: list1, listable_type: project, listable_id: 100 } }
但得到了:
{ list: { name: list1, project_type: project, project_id: 100 } }
我错过了什么?有没有办法定义多态类型或密钥?。
这是我的临时黑客
答案 0 :(得分:6)
首先,基于您拥有的当前模型,您不需要使用多态关联。而且您可能不希望在关系的两端都设置polymorphic
选项。
如果您希望有效负载包含listable
,则只需重命名您的属性:
App.List = DS.Model.extend
name: DS.attr('string')
listable: DS.belongsTo('App.Project', { polymorphic: true })
<强>更新强>
根据我对您的类的理解,它是List
,可以属于不同的类型。所以你应该像这样定义你的模型:
App.Listable = DS.Model.extend
lists: DS.hasMany('App.List')
App.Project = App.Listable.extend
App.Proposal = App.Listable.extend
App.Employee = App.Listable.extend
App.List = DS.Model.extend
name: DS.attr('string')
listable: DS.belongsTo('App.Listable', { polymorphic: true })
并且有效负载将如下所示:
{list: {name: "list1", listable_type: 'project', listable_id: 100}}
我不知道您是否也希望同时将列表添加到多个可列表中。根据您的模型名称,我很想相信它不是您想要的:列表应包含不同的对象(项目,提案,员工)。而不是一个项目可以有多个列表。