@@ -304,10 +304,10 @@ def find_included_fragments(source_fragments, relationship, options)
304
304
end
305
305
306
306
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 ?
309
309
310
- parent_resource_klass = relationship . resource_klass
310
+ parent_resource_klass = inverse_relationship . resource_klass
311
311
312
312
include_directives = options . fetch ( :include_directives , { } )
313
313
@@ -332,7 +332,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
332
332
end
333
333
334
334
join_manager = ActiveRelation ::JoinManager . new ( resource_klass : self ,
335
- source_relationship : relationship ,
335
+ source_relationship : inverse_relationship ,
336
336
relationships : linkage_relationships . collect ( &:name ) ,
337
337
sort_criteria : sort_criteria ,
338
338
filters : filters )
@@ -352,7 +352,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
352
352
if options [ :cache ]
353
353
# This alias is going to be resolve down to the model's table name and will not actually be an alias
354
354
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 ]
356
356
357
357
pluck_fields = [
358
358
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
400
400
fragments [ rid ] . add_related_from ( parent_rid )
401
401
402
402
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 )
404
404
end
405
405
406
406
attributes_offset = 2
@@ -452,7 +452,7 @@ def find_related_fragments_from_inverse(source, source_relationship, options, co
452
452
end
453
453
end
454
454
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 ]
456
456
source_field = sql_field_with_fixed_alias ( parent_table_alias , parent_resource_klass . _primary_key , "jr_source_id" )
457
457
458
458
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
471
471
parent_rid = JSONAPI ::ResourceIdentity . new ( parent_resource_klass , resource . _model . attributes [ 'jr_source_id' ] )
472
472
473
473
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 )
475
475
end
476
476
477
477
fragments [ rid ] . add_related_from ( parent_rid )
@@ -503,15 +503,16 @@ def count_related(source, relationship, options = {})
503
503
end
504
504
505
505
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?
507
508
508
- related_klass = relationship . resource_klass
509
+ related_klass = inverse_relationship . resource_klass
509
510
510
511
filters = options . fetch ( :filters , { } )
511
512
512
513
# Joins in this case are related to the related_klass
513
514
join_manager = ActiveRelation ::JoinManager . new ( resource_klass : self ,
514
- source_relationship : relationship ,
515
+ source_relationship : inverse_relationship ,
515
516
filters : filters )
516
517
517
518
records = apply_request_settings_to_records ( records : records ( options ) ,
@@ -521,7 +522,7 @@ def count_related_from_inverse(source_resource, source_relationship, options = {
521
522
filters : filters ,
522
523
options : options )
523
524
524
- related_alias = join_manager . join_details_by_relationship ( relationship ) [ :alias ]
525
+ related_alias = join_manager . join_details_by_relationship ( inverse_relationship ) [ :alias ]
525
526
526
527
records = records . select ( Arel . sql ( "#{ concat_table_field ( related_alias , related_klass . _primary_key ) } " ) )
527
528
0 commit comments