code: function(options) {
      options = options || {};
      var self = this;
      var fns = [];
      _.each(self.relationDefinitions, function(relationAttributes, relationKey) {
        if (_.isArray(options.onlyRelations)) {
          if (options.onlyRelations.indexOf(relationKey) === -1) return;
        }
        var relation = self.get(relationKey);
        if (relation && !relation.url) {
          return;
        }
        if (relation && relation.fetch) {
          // When the run is parallel, clone the options so no shared promises happen.
          var fetchOpts = _.has(options.relation, relationKey)
            ? _.clone(options.relation[relationKey])
            : _.clone(options);
          fns.push(_.bind(relation.fetch, relation, fetchOpts));
        }
      }, this);
  
      return parallel(fns)
        .then(function relationsFetched() {
          self.fetchStatus = 'all_fetched';
          return self;
        }, function error(err) {
          if (options.ignoreFailures) {
            self.fetchStatus = 'all_fetched';
            return when.resolve(self);
          }
          return when.reject(err);
        });
    }
docs: ## BaseModel.prototype.fetchRelations
  
  Fetches relations available based on current attributes
  if options.onlyRelations Array is specified only those relations are fetched
  
  e.g.
  ```js
  fetchRelations({onlyRelations: ['user']})
  ```
  will fetch only relation `user`
  
  @param {Object} options Options
  @returns {Promise} promise