Как загружать записи {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']
  }
Другие вопросы по тегам