如何在 Rails 中使用 Ember 数据 2 和 JSONAPI::Resources 侧载 {json:api} 记录?

How to sideload {json:api} records with Ember Data 2 and JSONAPI::Resources in Rails?

我正在开发带有 Rails 后端的 Ember 应用程序,使用出色的 JSONAPI::Resources gem 公开我的数据。

我想使用 store.findRecordstore.query 等从我的后端获取记录,同时旁加载某些关系。 JSONAPI::Resources supports this part of the spec 但我不知道如何使 Ember 数据在请求 URL.

中包含 ?include=... 参数

如何指示 Ember Data (2.2.0) 在获取资源时要求后端包含关系?

如果可以,您可以试用 Ember Data 2.4 beta,其中包括 ds-finder-include 功能标志。

此功能标志使您能够使用 includes 键传递选项散列。

要了解如何启用功能标志,请查看 guide

我处理这个问题的方法是修改我的应用程序适配器来处理包含,然后将包含作为我的适配器选项传递到我的查询中。现在我只处理一个包含,但处理数组应该不会太难。

app/adapters/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']
  }