Ember: Using RESTAdapter with a nested API endpoint to POST a new record
Problem statement:
1. You are using Ember Data and have two models, say Blog
and Post
where Post
has defined a DS.belongsTo('Blog')
relationship.
2. Your API endpoint is nested, i.e., the endpoint to create a post is taking a POST request to /blog/:blogId/posts
.
3. You are using RESTAdapter
The correct solution is to create an adapter override at app/adapters/post.js
with the appropriate method to provide the correct endpoint URL. See the sample below:
import ApplicationAdapter from './application';
export default ApplicationAdapter.extend({
urlForCreateRecord(modelName, snapshot) {
let blogID = snapshot.belongsTo('blog').id;
return `/${this.namespace}/blogs/${blogID}/posts`;
}
});
Here we are using the snapshot
object to get the parent model and its ID to construct the URL. This is about the minimal override I could find, compared to overriding the complete createRecord, for example. Hope it helps!