无嵌套的Ember createRecord/RESTAdapater

无嵌套的Ember createRecord/RESTAdapater,rest,ember.js,ember-data,Rest,Ember.js,Ember Data,我正在尝试创建一个带有余烬和节点的记录。显然,余烬喜欢嵌套你的对象 如果我给它: this.store.createRecord('meal', { name: 'the name', meal_time: 'the time', tolerance: 'ouch' }).save(); 节点在req.body中获取此信息: { meal: { id: 'e5c90c23-1eb1-49e1-a3fa-865944b5eeea', name: '

我正在尝试创建一个带有余烬和节点的记录。显然,余烬喜欢嵌套你的对象

如果我给它:

  this.store.createRecord('meal', {
    name: 'the name',
    meal_time: 'the time',
    tolerance: 'ouch'
  }).save();
节点在
req.body
中获取此信息:

{ meal:
   { id: 'e5c90c23-1eb1-49e1-a3fa-865944b5eeea',
     name: 'the name',
     meal_time: 'the time',
     tolerance: 'ouch' } 
}
我宁愿修改余烬面而不是节点面


有没有办法让
createRecord
发送对象而不嵌套它?

您需要自定义序列化程序

创建如下应用程序序列化程序:
ember g serializer application

然后对其进行编辑以使用basic

然后通过重写其属性和方法对其进行自定义,使其生成所需的输出

定制的直接方法是,但这只是表面


理想情况下,您希望所有类型的操作都具有一致的行为,而不仅仅是
createRecord
。因此,您需要研究序列化程序是如何组织的。阅读、介绍和,浏览RESTSerializer代码库。

实现这一点的最简单方法是重写
Serializer.serializeIntoHash()

此代码将从所有传出模型中删除顶层对象


您可以在应用程序序列化程序上重写它。。或者您可能拥有的任何特定于模型的序列化程序。

余烬就是这样工作的!它试图将模型保存为REST资源。同样从RESTAPI的角度来看,这是正确的。
serializeIntoHash(hash, type, snapshot, options) {
  Ember.merge(hash, this.serialize(snapshot, options));
}