2017-08-06 92 views
1

我正在構建一個Rails 5後端API,它將接收來自我的Ember應用程序的請求。然而,我有一些麻煩讓Ember以我的Rails服務器能夠理解的方式格式化請求。在Ember中自定義請求格式

默認情況下,Rails的創建控制器期待這種格式參數,假設模型是,比方說,Car

"car": { 
    "id": "1", 
    "name": "Foo", 
    "bar": "Bar", 
    ... 
} 

但是它看起來像灰燼被髮送這種格式要求:

"data": [ 
    { 
    id: "1", 
    type: "cars", 
    attributes: { 
     "name: "Foo", 
     "bar": "Bar", 
     ... 
    } 
] 

我能做些什麼來讓Ember以我的Rails服務器能夠理解的方式發送請求載荷?謝謝。

+0

導軌接受的格式是REST格式,所以應用適配器和串行化器應擴展'RESTAdapter'不'JSONAPIAdapter'。 – kumkanillam

+0

謝謝。我試過將應用程序適配器(application.js)更改爲RESTAdapter,但我不明白如何使用RESTSerializer。你可以幫我嗎? – Argus9

+0

你的序列化器也應該擴展'DS.RESTSerializer'。如果你的後端API請求響應遵循REST格式,那麼一切都將工作開箱即用...如果你正在編寫後端,然後考慮JSONAPI格式 – kumkanillam

回答

1

您的Rails正在接受REST適配器格式,爲了正常工作,您的適配器應該擴展DS.RESTAdapter,並且序列化器應該擴展爲DS.RESTSerializer。默認情況下,它將附帶JSONAPIAdapterJSONAPISerializer

如果您對後端代碼有控制權,那麼可以考慮編寫json-api格式的響應,以便使用該方式。

參考:
https://emberjs.com/api/ember-data/2.14/classes/DS.RESTAdapter
https://emberjs.com/api/ember-data/2.14/classes/DS.RESTSerializer

https://emberjs.com/api/ember-data/2.14/classes/DS.JSONAPIAdapter https://emberjs.com/api/ember-data/2.14.9/classes/DS.JSONAPISerializer