@@ -31,7 +31,7 @@ def self.get_ids_from_request(params, user)
31
31
32
32
def perform
33
33
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
35
35
has_smart_fields = @params [ :fields ] [ @collection_name ] . split ( ',' ) . any? do |field |
36
36
ForestLiana ::SchemaHelper . is_smart_field? ( @resource , field )
37
37
end
@@ -132,26 +132,38 @@ def columns_for_cross_database_association(association_name)
132
132
133
133
def compute_includes
134
134
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
135
139
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 )
138
143
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
143
147
144
- includes_has_many = SchemaUtils . many_associations ( @resource )
145
- . select { |association | SchemaUtils . model_included? ( association . klass ) }
146
- . map ( &:name )
148
+ association . name
149
+ end
147
150
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
150
163
151
- if @field_names_requested
152
164
@includes = ( includes & @field_names_requested ) . concat ( includes_for_smart_search )
153
165
else
154
- @includes = includes
166
+ @includes = associations_has_one . map ( & :name )
155
167
end
156
168
end
157
169
@@ -298,7 +310,7 @@ def pagination?
298
310
299
311
def compute_select_fields
300
312
select = [ '_forest_admin_eager_load' ]
301
- @params [ :fields ] [ @collection_name ] . split ( ',' ) . each do |path |
313
+ @field_names_requested . each do |path |
302
314
association = get_one_association ( path )
303
315
if association
304
316
while association . options [ :through ]
0 commit comments