Ruby on rails Ember了解序列化程序和适配器

Ruby on rails Ember了解序列化程序和适配器,ruby-on-rails,rest,ember.js,json-api,Ruby On Rails,Rest,Ember.js,Json Api,我的前端应用程序(ember 2.3.1,ember data 2.3.3)和后端应用程序(带有jsonapi序列化程序的rails 5)之间的通信很麻烦 我会尽量描述我所遇到的所有情况 在后端,我希望以jsonapi发送响应,并以REST格式获取请求。我正在使用序列化程序以及如何发送正确的响应。例如{“data”:[{“id”:“1”,“type”:“projects”,“attributes”:{“title”:“one”},links… 在ember端,我定义了jsonapi适配器和res

我的前端应用程序(ember 2.3.1,ember data 2.3.3)和后端应用程序(带有jsonapi序列化程序的rails 5)之间的通信很麻烦

我会尽量描述我所遇到的所有情况

在后端,我希望以jsonapi发送响应,并以REST格式获取请求。我正在使用序列化程序以及如何发送正确的响应。例如
{“data”:[{“id”:“1”,“type”:“projects”,“attributes”:{“title”:“one”},links…

在ember端,我定义了jsonapi适配器和rest序列化程序。 当ember从后端接收到数据时,我在控制台中收到警告,如负载中遇到“数据”,但找不到模型名称“数据”的模型(使用智能任务解析模型名称)-ember@serializer:应用程序:.modelNameFromPayloadKey(“数据”)。 当我将ember中的序列化程序从rest更改为jsonapi时,一切都正常工作。但是请求以jsonapi格式发送到后端。我收到了下一个参数
{“data”=>{“attributes”=>{“title”=>“test”},“type”=>“projects”},“controller”=>“projects”,“action”=>“create”,“project”=>{}
而不是
{“project”=>{title”=>“qwe”},“控制器”=>“项目”,“操作”=>“创建”}

我不明白rest序列化程序和jsonapi适配器为什么会相互影响,以及如何在ember中使用rest序列化程序。我花了很多时间研究这个奇怪的行为,但什么都不懂

我很乐意接受任何类型的帮助:)

确定EmberData如何与后端协同工作。它通常包括URL格式和请求头

确定如何处理和格式化数据。因此,在您的情况下,当数据发送到后端时,您只需要更改数据格式。要实现这一点,您应该

例如:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
  serialize(snapshot, options) {
    var json = this._super(...arguments);
    var res = json.data;
    return data;
  }
});

它将从请求中删除根节点
数据
。因此,您可以在发送之前将json转换为所需的结构。

Crabdar的答案是您需要学习如何做的。如果您可以切换到使用Cerbris jsonapi resources gem,您应该能够毫无问题地使用ember jsonapi适配器。这是一个相当成熟的实现

我尝试使用rest适配器和jsonapi序列化程序,但没有任何更改。看起来适配器和序列化程序应该只使用一种格式。这也让我感到困惑。我认为最好的选择是坚持使用jsonapi适配器和序列化程序。您将希望覆盖serializer获取您要发送到后端的REST JSON格式。@Grapho谢谢,这就像一个变体,但我仍然认为我这边遗漏了一些东西。为什么不使用REST API或JSON API?Imho,使用两者会给您的API带来一些混乱。我同意Crabar的观点。我需要重新思考如何在应用程序之间进行交互。看起来您是对。我需要在ember中使用适配器和序列化程序。因为有些东西以我所期望的另一种方式工作。