@@ -27,7 +27,7 @@ function defaultSerialize (options, cb) {
2727 */
2828 if ( options . requestedIncludes ) {
2929 try {
30- handleIncludes ( resultData , options . requestedIncludes , options . relationships ) ;
30+ handleIncludes ( resultData , options . requestedIncludes , options . relationships , options . app ) ;
3131 } catch ( err ) {
3232 cb ( err ) ;
3333 }
@@ -167,11 +167,10 @@ 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
174- if ( relation . type === 'belongsTo' || relation . type === 'referencesMany' ) {
173+ if ( utils . relationFkOnModelFrom ( relation ) ) {
175174 fkName = relation . keyFrom ;
176175 }
177176
@@ -187,15 +186,22 @@ 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
194193 var pk = data [ options . primaryKeyField ] ;
195194 var fk = data [ fkName ] ;
196195
197196 var fromType = utils . pluralForModel ( relation . modelFrom ) ;
198- var toType = utils . pluralForModel ( relation . modelTo ) ;
197+ var toType = '' ;
198+ if ( relation . polymorphic && utils . relationFkOnModelFrom ( relation ) ) {
199+ var discriminator = relation . polymorphic . discriminator ;
200+ var model = options . app . models [ data [ discriminator ] ] ;
201+ toType = utils . pluralForModel ( model ) ;
202+ } else {
203+ toType = utils . pluralForModel ( relation . modelTo ) ;
204+ }
199205
200206 // Relationship `links` should always be defined unless this is a
201207 // relationship request
@@ -306,7 +312,7 @@ function makeLinks (links, item) {
306312 * @throws {Error }
307313 * @return {undefined }
308314 */
309- function handleIncludes ( resp , includes , relations ) {
315+ function handleIncludes ( resp , includes , relations , app ) {
310316 var resources = _ . isArray ( resp . data ) ? resp . data : [ resp . data ] ;
311317
312318 if ( typeof includes === 'string' ) {
@@ -321,11 +327,17 @@ function handleIncludes (resp, includes, relations) {
321327 return includes . map ( function ( include ) {
322328 var relation = relations [ include ] ;
323329 var propertyKey = relation . keyFrom ;
324- var plural = utils . pluralForModel ( relation . modelTo ) ;
330+ var plural = '' ;
331+ if ( relation . polymorphic && utils . relationFkOnModelFrom ( relation ) ) {
332+ var discriminator = resource . attributes [ relation . polymorphic . discriminator ] ;
333+ plural = utils . pluralForModel ( app . models [ discriminator ] ) ;
334+ } else {
335+ plural = utils . pluralForModel ( relation . modelTo ) ;
336+ }
325337 var embeds = [ ] ;
326338
327339 // If relation is belongsTo then pk and fk are the other way around
328- if ( relation . type === 'belongsTo' || relation . type === 'referencesMany' ) {
340+ if ( utils . relationFkOnModelFrom ( relation ) ) {
329341 propertyKey = relation . keyTo ;
330342 }
331343
0 commit comments