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?