【问题标题】:Ember many-to-many Ids are not included in JSON payload on post?Ember 多对多 ID 不包含在 post 的 JSON 有效负载中?
【发布时间】:2015-02-03 11:33:05
【问题描述】:

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

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

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.coffee:

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 负载:( POST http://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

无论如何,payload 中没有任何 salesReps id 的踪迹!!

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

  • 仅在会议模型中设置 hasMany 关系。

  • 在两个 SalesRep 上设置 {async: true},然后设置 {async: false} 然后在其中一个上

  • 花了将近 2 天的时间在谷歌上搜索并阅读此处的所有相关帖子 没有运气

任何帮助/提示/建议,非常感谢

【问题讨论】:

标签: json ember.js ember-data


【解决方案1】:

我会写出我在无休止的阅读和研究后找到的解决方案,我会写出完整的细节,以及我经历过的尝试/失败,因为没有人,没有人应该这样做花了超过 3 天的时间来修复类似的问题!

我正在使用 Ember-cli,所以,有一个文件/目录结构如下:

第一次尝试:

尝试async: true, embedded true 的所有组合,什么都没有。

结果,没有运气


第二次尝试:

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

会议.咖啡

`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:[] 数组发送到控制器!我可以确认服务器正在根据需要保存记录。

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


第三次尝试:

经过更多阅读和无休止的头撞墙后,更改一行解决了问题!:

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

serializer = DS.ActiveModelSerializer.extend

还有,瞧!保存到后端,并在 ember 中将 correctley 列为关联!

此解决方案是 3+ 持续头痛的结果,我将其发布在这里,希望它可能对面临相同问题的人有所帮助,我不能声称这是我自己的解决方案,但是,这是阅读许多内容的结果人的密码。

我不确定这是否是 Ember 这样做的方式,所以,欢迎任何建议、改进想法和想法。

【讨论】:

    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多