@@ -153,6 +153,11 @@ def find_fragments(filters, options = {})
153
153
pluck_fields << Arel . sql ( "#{ concat_table_field ( resource_table_alias , model_field [ :name ] ) } AS #{ resource_table_alias } _#{ model_field [ :name ] } " )
154
154
end
155
155
156
+ sort_fields = options . dig ( :_relation_helper_options , :sort_fields )
157
+ sort_fields . try ( :each ) do |field |
158
+ pluck_fields << Arel . sql ( field )
159
+ end
160
+
156
161
fragments = { }
157
162
rows = records . pluck ( *pluck_fields )
158
163
rows . each do |row |
@@ -445,6 +450,11 @@ def find_related_monomorphic_fragments(source_rids, relationship, options, conne
445
450
pluck_fields << Arel . sql ( "#{ concat_table_field ( resource_table_alias , model_field [ :name ] ) } AS #{ resource_table_alias } _#{ model_field [ :name ] } " )
446
451
end
447
452
453
+ sort_fields = options . dig ( :_relation_helper_options , :sort_fields )
454
+ sort_fields . try ( :each ) do |field |
455
+ pluck_fields << Arel . sql ( field )
456
+ end
457
+
448
458
fragments = { }
449
459
rows = records . distinct . pluck ( *pluck_fields )
450
460
rows . each do |row |
@@ -680,24 +690,23 @@ def apply_request_settings_to_records(records:,
680
690
paginator : nil ,
681
691
options : { } )
682
692
683
- opts = options . dup
684
- records = resource_klass . apply_joins ( records , join_manager , opts )
693
+ options [ :_relation_helper_options ] = { join_manager : join_manager , sort_fields : [ ] }
694
+
695
+ records = resource_klass . apply_joins ( records , join_manager , options )
685
696
686
697
if primary_keys
687
698
records = records . where ( _primary_key => primary_keys )
688
699
end
689
700
690
- opts [ :join_manager ] = join_manager
691
-
692
701
unless filters . empty?
693
- records = resource_klass . filter_records ( records , filters , opts )
702
+ records = resource_klass . filter_records ( records , filters , options )
694
703
end
695
704
696
705
if sort_primary
697
706
records = records . order ( _primary_key => :asc )
698
707
else
699
708
order_options = resource_klass . construct_order_options ( sort_criteria )
700
- records = resource_klass . sort_records ( records , order_options , opts )
709
+ records = resource_klass . sort_records ( records , order_options , options )
701
710
end
702
711
703
712
if paginator
@@ -731,12 +740,16 @@ def apply_single_sort(records, field, direction, options)
731
740
732
741
strategy = _allowed_sort . fetch ( field . to_sym , { } ) [ :apply ]
733
742
743
+ options [ :_relation_helper_options ] ||= { }
744
+ options [ :_relation_helper_options ] [ :sort_fields ] ||= [ ]
745
+
734
746
if strategy
735
747
records = call_method_or_proc ( strategy , records , direction , context )
736
748
else
737
- join_manager = options [ :join_manager ]
738
-
739
- records = records . order ( Arel . sql ( "#{ get_aliased_field ( field , join_manager ) } #{ direction } " ) )
749
+ join_manager = options . dig ( :_relation_helper_options , :join_manager )
750
+ sort_field = join_manager ? get_aliased_field ( field , join_manager ) : field
751
+ options [ :_relation_helper_options ] [ :sort_fields ] . push ( "#{ sort_field } " )
752
+ records = records . order ( Arel . sql ( "#{ sort_field } #{ direction } " ) )
740
753
end
741
754
records
742
755
end
@@ -825,8 +838,9 @@ def apply_filter(records, filter, value, options = {})
825
838
if strategy
826
839
records = call_method_or_proc ( strategy , records , value , options )
827
840
else
828
- join_manager = options [ :join_manager ]
829
- records = records . where ( Arel . sql ( get_aliased_field ( filter , join_manager ) ) => value )
841
+ join_manager = options . dig ( :_relation_helper_options , :join_manager )
842
+ field = join_manager ? get_aliased_field ( filter , join_manager ) : filter
843
+ records = records . where ( Arel . sql ( field ) => value )
830
844
end
831
845
832
846
records
0 commit comments