1

我无法使用 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 } }

我错过了什么?有没有办法定义多态类型或键?


这是我的临时黑客

https://gist.github.com/arenoir/5409904

4

1 回答 1

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}}

我不知道您是否还希望将一个列表同时添加到多个列表中。根据您的模型名称,我很容易相信这不是您想要的:一个列表应该包含不同的对象(项目、提案、员工)。而不是一个项目可以有多个列表。

于 2013-04-17T00:43:23.977 回答