@@ -31,7 +31,7 @@ def self.get_ids_from_request(params, user)
3131
3232 def perform
3333 polymorphic_association , preload_loads = analyze_associations ( @resource )
34- includes = @includes . uniq - polymorphic_association - preload_loads
34+ includes = @includes . uniq - polymorphic_association - preload_loads - @optional_includes
3535 has_smart_fields = @params [ :fields ] [ @collection_name ] . split ( ',' ) . any? do |field |
3636 ForestLiana ::SchemaHelper . is_smart_field? ( @resource , field )
3737 end
@@ -132,26 +132,38 @@ def columns_for_cross_database_association(association_name)
132132
133133 def compute_includes
134134 associations_has_one = ForestLiana ::QueryHelper . get_one_associations ( @resource )
135+ @optional_includes = [ ]
136+ if @field_names_requested
137+ includes = associations_has_one . map do |association |
138+ association_name = association . name . to_s
135139
136- includes = associations_has_one . map ( &:name )
137- includes_for_smart_search = [ ]
140+ if @params [ :fields ] . key? ( association_name ) &&
141+ @params [ :fields ] [ association_name ] . split ( ',' ) . size == 1 &&
142+ @params [ :fields ] [ association_name ] . split ( ',' ) . include? ( association . klass . primary_key )
138143
139- if @collection && @collection . search_fields
140- includes_for_smart_search = @collection . search_fields
141- . select { |field | field . include? '.' }
142- . map { |field | field . split ( '.' ) . first . to_sym }
144+ @field_names_requested << association . foreign_key
145+ @optional_includes << association . name
146+ end
143147
144- includes_has_many = SchemaUtils . many_associations ( @resource )
145- . select { |association | SchemaUtils . model_included? ( association . klass ) }
146- . map ( &:name )
148+ association . name
149+ end
147150
148- includes_for_smart_search = includes_for_smart_search & includes_has_many
149- end
151+ includes_for_smart_search = [ ]
152+ if @collection && @collection . search_fields
153+ includes_for_smart_search = @collection . search_fields
154+ . select { |field | field . include? '.' }
155+ . map { |field | field . split ( '.' ) . first . to_sym }
156+
157+ includes_has_many = SchemaUtils . many_associations ( @resource )
158+ . select { |association | SchemaUtils . model_included? ( association . klass ) }
159+ . map ( &:name )
160+
161+ includes_for_smart_search = includes_for_smart_search & includes_has_many
162+ end
150163
151- if @field_names_requested
152164 @includes = ( includes & @field_names_requested ) . concat ( includes_for_smart_search )
153165 else
154- @includes = includes
166+ @includes = associations_has_one . map ( & :name )
155167 end
156168 end
157169
@@ -298,7 +310,7 @@ def pagination?
298310
299311 def compute_select_fields
300312 select = [ '_forest_admin_eager_load' ]
301- @params [ :fields ] [ @collection_name ] . split ( ',' ) . each do |path |
313+ @field_names_requested . each do |path |
302314 association = get_one_association ( path )
303315 if association
304316 while association . options [ :through ]
0 commit comments