API Docs for: v3.5.2
Show:

DS.BuildURLMixin Class

WARNING: This interface is likely to change in order to accommodate RFC: Ember Data url templates

Using BuildURLMixin

To use URL building, include the mixin when extending an adapter, and call buildURL where needed. The default behaviour is designed for RESTAdapter.

Example

  export default DS.Adapter.extend(BuildURLMixin, {
    findRecord: function(store, type, id, snapshot) {
      var url = this.buildURL(type.modelName, id, snapshot, 'findRecord');
      return this.ajax(url, 'GET');
    }
  });

Attributes

The host and namespace attributes will be used if defined, and are optional.

Methods

_buildURL

(
  • modelName
  • id
)
String private

Parameters:

  • modelName String
  • id String

Returns:

String:

url

buildURL

(
  • modelName
  • id
  • snapshot
  • requestType
  • query
)
String

Builds a URL for a given type and optional ID.

By default, it pluralizes the type's name (for example, 'post' becomes 'posts' and 'person' becomes 'people'). To override the pluralization see pathForType.

If an ID is specified, it adds the ID to the path generated for the type, separated by a /.

When called by RESTAdapter.findMany() the id and snapshot parameters will be arrays of ids and snapshots.

Parameters:

  • modelName String
  • id (String | Array | Object)

    single id or array of ids or query

  • snapshot (DS.Snapshot | Array)

    single snapshot or array of snapshots

  • requestType String
  • query Object

    object of query parameters to send for query requests.

Returns:

String:

url

pathForType

(
  • modelName
)
String

Determines the pathname for a given type.

By default, it pluralizes the type's name (for example, 'post' becomes 'posts' and 'person' becomes 'people').

Pathname customization

For example, if you have an object LineItem with an endpoint of /line_items/.

import DS from 'ember-data';
import { decamelize } from '@ember/string';
import { pluralize } from 'ember-inflector';

export default DS.RESTAdapter.extend({
  pathForType: function(modelName) {
    var decamelized = decamelize(modelName);
    return pluralize(decamelized);
  }
});

Parameters:

  • modelName String

Returns:

String:

path

urlForCreateRecord

(
  • modelName
  • snapshot
)
String

Builds a URL for a record.save() call when the record was created locally using store.createRecord().

Example:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  urlForCreateRecord(modelName, snapshot) {
    return this._super(...arguments) + '/new';
  }
});

Parameters:

Returns:

String:

url

urlForDeleteRecord

(
  • id
  • modelName
  • snapshot
)
String

Builds a URL for a record.save() call when the record has been deleted locally.

Example:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  urlForDeleteRecord(id, modelName, snapshot) {
    return this._super(...arguments) + '/destroy';
  }
});

Parameters:

Returns:

String:

url

urlForFindAll

(
  • modelName
  • snapshot
)
String

Builds a URL for a store.findAll(type) call.

Example:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  urlForFindAll(modelName, snapshot) {
    return 'data/comments.json';
  }
});

Parameters:

Returns:

String:

url

urlForFindBelongsTo

(
  • id
  • modelName
  • snapshot
)
String

Builds a URL for fetching an async belongsTo relationship when a url is not provided by the server.

Example:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  urlForFindBelongsTo(id, modelName, snapshot) {
    let baseUrl = this.buildURL(modelName, id);
    return ${baseUrl}/relationships;
  }
});

Parameters:

Returns:

String:

url

urlForFindHasMany

(
  • id
  • modelName
  • snapshot
)
String

Builds a URL for fetching an async hasMany relationship when a URL is not provided by the server.

Example:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  urlForFindHasMany(id, modelName, snapshot) {
    let baseUrl = this.buildURL(modelName, id);
    return ${baseUrl}/relationships;
  }
});

Parameters:

Returns:

String:

url

urlForFindMany

(
  • ids
  • modelName
  • snapshots
)
String

Builds a URL for coalescing multiple store.findRecord(type, id) records into 1 request when the adapter's coalesceFindRequests property is true.

Example:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  urlForFindMany(ids, modelName) {
    let baseUrl = this.buildURL();
    return ${baseUrl}/coalesce;
  }
});

Parameters:

  • ids Array
  • modelName String
  • snapshots Array

Returns:

String:

url

urlForFindRecord

(
  • id
  • modelName
  • snapshot
)
String

Builds a URL for a store.findRecord(type, id) call.

Example:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  urlForFindRecord(id, modelName, snapshot) {
    let baseUrl = this.buildURL(modelName, id, snapshot);
    return ${baseUrl}/users/${snapshot.adapterOptions.user_id}/playlists/${id};
  }
});

Parameters:

Returns:

String:

url

urlForQuery

(
  • query
  • modelName
)
String

Builds a URL for a store.query(type, query) call.

Example:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'https://api.github.com',
  urlForQuery (query, modelName) {
    switch(modelName) {
      case 'repo':
        return https://api.github.com/orgs/${query.orgId}/repos;
      default:
        return this._super(...arguments);
    }
  }
});

Parameters:

  • query Object
  • modelName String

Returns:

String:

url

urlForQueryRecord

(
  • query
  • modelName
)
String

Builds a URL for a store.queryRecord(type, query) call.

Example:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  urlForQueryRecord({ slug }, modelName) {
    let baseUrl = this.buildURL();
    return ${baseUrl}/${encodeURIComponent(slug)};
  }
});

Parameters:

  • query Object
  • modelName String

Returns:

String:

url

urlForUpdateRecord

(
  • id
  • modelName
  • snapshot
)
String

Builds a URL for a record.save() call when the record has been updated locally.

Example:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  urlForUpdateRecord(id, modelName, snapshot) {
    return /${id}/feed?access_token=${snapshot.adapterOptions.token};
  }
});

Parameters:

Returns:

String:

url

urlPrefix

(
  • path
  • parentURL
)
String private

Parameters:

  • path String
  • parentURL String

Returns:

String:

urlPrefix