Ember-data find record by id and also additional parameters?

ember-data, ember.js, javascript

Solution

You may have found a workaround the problem by now, but the way to go is to use the `adapterOptions` on the `options` argument.

So, let's go:

Where you fetch the model (i.e. a route), setup the custom argument you want. In your case, the include. It goes like this:

//file app/routes/post/edit.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params) {
    return this.store.findRecord('post', params.post_id, {
      adapterOptions: { include: 'all' }
    });
  }
});

Read this value inside the model's adapter to customize the ajax request:

//file app/adapters/post.js

export default JSONAPIAdapter.extend({
  findRecord: function(store, type, id, snapshot) {
    if (Em.get(snapshot, 'include')) {
      let url = this.buildURL(type.modelName, id, snapshot, 'findRecord');
      let query = this.buildQuery(snapshot);
      return this.ajax(url, 'GET', { data: query });
    } else {
      this._super(...arguments);
    }
});

UPDATE 1:

On the ember-data newer versions (>= 2.4.0) you can do it out of the box, by calling `store.findRecord('post', {include: 'all'});`

Problem

In the Ember docs I found that find() has support for finding by id: ``` this.store.find('post', 1); // => GET /posts/1 ``` And also by passing arbitrary parameters: ``` this.store.find('post', { name: "Peter" }); // => GET to /posts?name='Peter' ``` But in my case I must find by id, and pass an additional parameter to request all fields to be included in the response (some are omitted by default), like so: ``` this.store.find('post', 1); // => GET /posts/1?include=all ``` I tried to do it this way: ``` this.get('store').find('post', params.post_id, { include : 'all' }); ``` But my params were ignored. This seems a fairly basic use case so I must be missing something... How can I accomplish this?

Original source

Related problems