@@ -304,10 +304,10 @@ def find_included_fragments(source_fragments, relationship, options)
304304 end
305305
306306 def find_related_fragments_from_inverse ( source , source_relationship , options , connect_source_identity )
307- relationship = source_relationship . resource_klass . _relationship ( source_relationship . inverse_relationship )
308- raise "missing inverse relationship" unless relationship . present ?
307+ inverse_relationship = source_relationship . _inverse_relationship
308+ return { } if inverse_relationship . blank ?
309309
310- parent_resource_klass = relationship . resource_klass
310+ parent_resource_klass = inverse_relationship . resource_klass
311311
312312 include_directives = options . fetch ( :include_directives , { } )
313313
@@ -332,7 +332,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
332332 end
333333
334334 join_manager = ActiveRelation ::JoinManager . new ( resource_klass : self ,
335- source_relationship : relationship ,
335+ source_relationship : inverse_relationship ,
336336 relationships : linkage_relationships . collect ( &:name ) ,
337337 sort_criteria : sort_criteria ,
338338 filters : filters )
@@ -352,7 +352,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
352352 if options [ :cache ]
353353 # This alias is going to be resolve down to the model's table name and will not actually be an alias
354354 resource_table_alias = self . _table_name
355- parent_table_alias = join_manager . join_details_by_relationship ( relationship ) [ :alias ]
355+ parent_table_alias = join_manager . join_details_by_relationship ( inverse_relationship ) [ :alias ]
356356
357357 pluck_fields = [
358358 sql_field_with_alias ( resource_table_alias , self . _primary_key ) ,
@@ -400,7 +400,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
400400 fragments [ rid ] . add_related_from ( parent_rid )
401401
402402 if connect_source_identity
403- fragments [ rid ] . add_related_identity ( relationship . name , parent_rid )
403+ fragments [ rid ] . add_related_identity ( inverse_relationship . name , parent_rid )
404404 end
405405
406406 attributes_offset = 2
@@ -452,7 +452,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
452452 end
453453 end
454454
455- parent_table_alias = join_manager . join_details_by_relationship ( relationship ) [ :alias ]
455+ parent_table_alias = join_manager . join_details_by_relationship ( inverse_relationship ) [ :alias ]
456456 source_field = sql_field_with_fixed_alias ( parent_table_alias , parent_resource_klass . _primary_key , "jr_source_id" )
457457
458458 records = records . select ( concat_table_field ( _table_name , Arel . star ) , source_field )
@@ -471,7 +471,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
471471 parent_rid = JSONAPI ::ResourceIdentity . new ( parent_resource_klass , resource . _model . attributes [ 'jr_source_id' ] )
472472
473473 if connect_source_identity
474- fragments [ rid ] . add_related_identity ( relationship . name , parent_rid )
474+ fragments [ rid ] . add_related_identity ( inverse_relationship . name , parent_rid )
475475 end
476476
477477 fragments [ rid ] . add_related_from ( parent_rid )
@@ -503,15 +503,16 @@ def count_related(source, relationship, options = {})
503503 end
504504
505505 def count_related_from_inverse ( source_resource , source_relationship , options = { } )
506- relationship = source_relationship . resource_klass . _relationship ( source_relationship . inverse_relationship )
506+ inverse_relationship = source_relationship . _inverse_relationship
507+ return -1 if inverse_relationship . blank?
507508
508- related_klass = relationship . resource_klass
509+ related_klass = inverse_relationship . resource_klass
509510
510511 filters = options . fetch ( :filters , { } )
511512
512513 # Joins in this case are related to the related_klass
513514 join_manager = ActiveRelation ::JoinManager . new ( resource_klass : self ,
514- source_relationship : relationship ,
515+ source_relationship : inverse_relationship ,
515516 filters : filters )
516517
517518 records = apply_request_settings_to_records ( records : records ( options ) ,
@@ -521,7 +522,7 @@ def count_related_from_inverse(source_resource, source_relationship, options = {
521522 filters : filters ,
522523 options : options )
523524
524- related_alias = join_manager . join_details_by_relationship ( relationship ) [ :alias ]
525+ related_alias = join_manager . join_details_by_relationship ( inverse_relationship ) [ :alias ]
525526
526527 records = records . select ( Arel . sql ( "#{ concat_table_field ( related_alias , related_klass . _primary_key ) } " ) )
527528
0 commit comments