Ember many-to-many ID 未包含在 post 上的 JSON 负载中?

Ember many-to-many Ids are not included in JSON payload on post?

我有一个meeting和一个sales-rep模型,关系是ManyToMany。

问题是,当我想创建一个新会议,并将现有的销售代表分配给它(他们已经保存到商店),但是销售代表 IDS 不包含在 post 操作导致的通过 model.save() (甚至不是空数组),为了更清楚,这是我的代码的样子:

meeting.coffee:

Meeting = DS.Model.extend
  client:     DS.belongsTo('client')
  salesReps:  DS.hasMany('sales-rep')
  memo:       DS.attr('string')
  startDate:  DS.attr('date')
  duration:   DS.attr()

sales-rep.咖啡:

SalesRep = DS.Model.extend
  meetings:   DS.hasMany('meeting')
  firstName:  DS.attr('string')
  lastName:   DS.attr('string')
  title:      DS.attr('string')

meetings/new.coffee(我在新会议控制器中使用的保存操作):

save: ->
  meeting = @get('model')
  meeting.set('client', @get('client'))
  meeting.get('salesReps').pushObjects(@get('salesReps.content'))
  meeting.save().then =>
    @transitionToRoute 'meetings'

JSON有效负载:(POSThttp://localhost:4200/api/meetings)

meeting: {memo: null, start_date: null, duration: "00:15", client_id: null}
client_id: null
duration: "00:15"
memo: null
start_date: null

无论如何,有效负载中没有任何销售代表 ID 的踪迹!!

到目前为止我尝试了什么:

任何Help/hints/Advice,非常感谢

我会写下我在无休止的阅读和研究后找到的解决方案,我会写下完整的细节,trial/failure我已经解决了,因为没有人,从来没有人 应该要花 3 天以上的时间来解决这样的问题!!

我正在使用 Ember-cli,因此,下面有一个 files/directories 结构:

第一次尝试:

尝试 async: true, embedded true 的所有组合,还有什么不行。

结果,运气不好


第二次尝试:

app/serializers/ 我添加了以下序列化程序文件:

meeting.coffee

`import DS from "ember-data"`
`import Ember from "ember"`
`import config from '../config/environment'`
 get = Ember.get

serializer = DS.RESTSerializer.extend
  serializeHasMany: (record, json, relationship) ->
    rel_ids = get(record, relationship.key).map (rel) -> get(rel, 'id') || []
    json["#{relationship.key.underscore().singularize()}_ids"] = rel_ids
    json
`export default serializer`

结果:

添加这个序列化程序,我终于能够将 sales_rep_ids:[] 数组发送到控制器!我可以确认服务器正在按要求保存 accociations。

但是,在列出会议时,我无法列出关联的 salesReps,因此,我检查了从服务器获取的 JSON,它是正确的(包括销售代表 ID !) 但仍未在 Ember

中列出

第三次尝试:

经过更多阅读和无休止 head-banging-against-the-wall,更改一行解决了问题!:

app/serializers/meeting.coffeeserializer = DS.RESTSerializer.extend 更改为

serializer = DS.ActiveModelSerializer.extend

瞧!保存到 back-end,并在 ember!

中正确列出关联

此解决方案是 3 次以上持续头痛的结果,我将其张贴在这里希望它可能对面临相同问题的人有所帮助,我不能声称这是我自己的解决方案,但是,这是阅读了很多人的代码。

我不确定这是否是 Ember 的方式,因此,欢迎提出任何建议、改进意见和想法。