Skip to content

Commit 95656ad

Browse files
committed
fix incorrect model passed to serializer when fetching related object
1 parent a0a7630 commit 95656ad

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

lib/serialize.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module.exports = function (app, defaults) {
1818
type,
1919
options,
2020
modelNamePlural,
21+
relatedModel,
2122
relatedModelPlural,
2223
relations,
2324
model,
@@ -70,11 +71,18 @@ module.exports = function (app, defaults) {
7071

7172
var relation = model.relations[relationName];
7273
if (relationName && relation) {
73-
relatedModelPlural = utils.pluralForModel(relation.modelTo);
74-
primaryKeyField = utils.primaryKeyForModel(relation.modelTo);
74+
if (relation.polymorphic) {
75+
var discriminator = utils.clone(ctx.instance)[relation.polymorphic.discriminator];
76+
relatedModel = app.models[discriminator];
77+
} else {
78+
relatedModel = relation.modelTo;
79+
}
80+
relatedModelPlural = utils.pluralForModel(relatedModel);
81+
primaryKeyField = utils.primaryKeyForModel(relatedModel);
7582

7683
if (relatedModelPlural) {
7784
type = relatedModelPlural;
85+
model = relatedModel;
7886
}
7987
}
8088

lib/serializer.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ function parseRelations (data, relations, options) {
167167
var collection = parts[parts.length - 1];
168168

169169
_.each(relations, function (relation, name) {
170-
171170
var fkName = relation.keyTo;
172171

173172
// If relation is belongsTo then fk is the other way around
@@ -187,7 +186,7 @@ function parseRelations (data, relations, options) {
187186
if (fkName !== options.primaryKeyField) {
188187
delete data[fkName];
189188
}
190-
relationships = parseRelations(data, relation.modelTo.relations, options);
189+
relationships = parseRelations(data, options.model.relations, options);
191190
return false;
192191
}
193192

test/belongsToPolymorphic.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,21 @@ describe('loopback json api belongsTo polymorphic relationships', function () {
7575
done();
7676
});
7777
});
78+
79+
it('should return the Post that this file belongs to when following the relationship link', function (done) {
80+
request(app).get('/files/1')
81+
.end(function (err, res) {
82+
expect(err).to.equal(null);
83+
expect(res.body.errors).to.equal(undefined);
84+
request(app).get(res.body.data.relationships.parent.links.related.split('api')[1])
85+
.end(function (err, res) {
86+
expect(err).to.equal(null);
87+
expect(res.body.errors).to.equal(undefined);
88+
expect(res.body.data.type).to.equal('posts');
89+
expect(res.body.data.id).to.equal('1');
90+
done();
91+
});
92+
});
93+
});
7894
});
7995
});

0 commit comments

Comments
 (0)