refresh(options = {}) {
      let attributes = {};

      // If this is new, we use all its attributes. Otherwise we just grab the primary key.
      if (this.isNew()) {
        attributes = this.attributes;
      } else {
        attributes[this.idAttribute] = this.attributes[this.idAttribute] || this.attributes[this.parsedIdAttribute()];
      }

      return this._doFetch(attributes, options).tap(() => {
        if (!options.silent) this._previousAttributes = _.cloneDeep(this.attributes);
      });
    }
@method Model#refresh
@since 0.8.2
@description

Update the attributes of a model, fetching it by its primary key. If no
attribute matches its {@link Model#idAttribute idAttribute}, then fetch by
all available fields.

@param {Object} options
  A hash of options. See {@link Model#fetch} for details.
@returns {Promise<Model>}
  A promise resolving to this model.