Как загружать записи {json:api} с помощью Ember Data 2 и JSONAPI::Resources in Rails?
Я разрабатываю приложение Ember с бэкэндом Rails, используя превосходный гем JSONAPI::Resources для предоставления моих данных.
Я хотел бы получить записи из моего бэкэнда, используя store.findRecord
, store.query
и т. д. при загрузке определенных отношений. JSONAPI::Resources поддерживает эту часть спецификации, но я не могу понять, как заставить Ember Data включать ?include=...
Параметр в URL запроса.
Как я могу дать Ember Data (2.2.0) команду запрашивать у бэкэнда отношения при получении ресурсов?
2 ответа
Если вы можете, вы можете попробовать бета-версию Ember Data 2.4, которая включает в себя ds-finder-include
признак
Этот признак функции позволяет передавать хэш опций с includes
ключ.
Чтобы узнать, как включить флаги функций, обратитесь к руководству.
Я справляюсь с этим, изменяя адаптер приложения для обработки включений, а затем передавая включения в качестве параметров адаптера в моем запросе. Сейчас я работаю только с одним включением, но это не должно быть слишком сложно для обработки массива.
приложение / адаптеры /application.js
import DS from 'ember-data';
export default DS.JSONAPIAdapter.extend({
urlForFindRecord(query, modelName, snapshot) {
var url = this._super(...arguments);
return this._processIncludes(url, snapshot);
},
urlForFindAll(query, modelName, snapshot) {
var url = this._super(...arguments);
return this._processIncludes(url, snapshot);
},
_processIncludes(url, snapshot) {
var options = snapshot && snapshot.adapterOptions;
if (options && options.include) {
url = `${url}?include=${options.include}`;
}
return url;
},
});
И затем, в моем хуке модели маршрутов, я просто добавляю опции адаптера.
return this.store.findRecord('myModel', params.id, {
adapterOptions: {
include: ['myChildModel']
}