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 的踪迹!!
到目前为止我尝试了什么:
仅在会议模型中设置 hasMany 关系。
在 SalesRep 和
然后在其中之一
花了将近 2 天的时间在谷歌上搜索并阅读了这里的所有相关帖子
运气不好
任何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.coffee
将 serializer = DS.RESTSerializer.extend
更改为
serializer = DS.ActiveModelSerializer.extend
瞧!保存到 back-end,并在 ember!
中正确列出关联
此解决方案是 3 次以上持续头痛的结果,我将其张贴在这里希望它可能对面临相同问题的人有所帮助,我不能声称这是我自己的解决方案,但是,这是阅读了很多人的代码。
我不确定这是否是 Ember 的方式,因此,欢迎提出任何建议、改进意见和想法。
我有一个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 的踪迹!!
到目前为止我尝试了什么:
仅在会议模型中设置 hasMany 关系。
在 SalesRep 和 然后在其中之一
花了将近 2 天的时间在谷歌上搜索并阅读了这里的所有相关帖子 运气不好
任何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.coffee
将 serializer = DS.RESTSerializer.extend
更改为
serializer = DS.ActiveModelSerializer.extend
瞧!保存到 back-end,并在 ember!
中正确列出关联此解决方案是 3 次以上持续头痛的结果,我将其张贴在这里希望它可能对面临相同问题的人有所帮助,我不能声称这是我自己的解决方案,但是,这是阅读了很多人的代码。
我不确定这是否是 Ember 的方式,因此,欢迎提出任何建议、改进意见和想法。