Ghost/ghost/admin/app/serializers/application.js
Kevin Ansfield 18c75ac670 Fixed serialisation of belongsTo relationships
no issue
- `belongsTo` relationships were failing to save on the server correctly because they did not contain the `_id` suffix
  - became noticeable when the first standalone `belongsTo` relationship was added to webhooks
  - added conditional for special-case `_by` relationships which don't require an additional `_id` when saving to the API
2018-10-18 18:23:19 +01:00

43 lines
1.2 KiB
JavaScript

import RESTSerializer from 'ember-data/serializers/rest';
import {camelize, decamelize, underscore} from '@ember/string';
import {pluralize} from 'ember-inflector';
export default RESTSerializer.extend({
serialize(/*snapshot, options*/) {
let json = this._super(...arguments);
// don't send attributes that are updated automatically on the server
delete json.created_by;
delete json.updated_by;
return json;
},
serializeIntoHash(hash, type, record, options) {
// Our API expects an id on the posted object
options = options || {};
options.includeId = true;
// We have a plural root in the API
let root = pluralize(type.modelName);
let data = this.serialize(record, options);
hash[root] = [data];
},
keyForAttribute(attr) {
return decamelize(attr);
},
keyForRelationship(key, typeClass, method) {
let transform = method === 'serialize' ? underscore : camelize;
if (typeClass === 'belongsTo' && !key.match(/(Id|By)$/)) {
let transformed = `${transform(key)}_id`;
return transformed;
}
return transform(key);
}
});