[#3477] Clarify what the previous code of eager_load_displayed_fields does
This commit is contained in:
parent
f0d83b1de8
commit
cf3f2409dd
1 changed files with 24 additions and 21 deletions
|
@ -138,30 +138,33 @@ class ProcedurePresentation < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def eager_load_displayed_fields(dossiers)
|
def eager_load_displayed_fields(dossiers)
|
||||||
displayed_fields
|
fields_to_eager_load = displayed_fields.reject { |field| field['table'] == 'self' }
|
||||||
.reject { |field| field['table'] == 'self' }
|
|
||||||
.group_by do |field|
|
|
||||||
case field['table']
|
|
||||||
when 'type_de_champ', 'type_de_champ_private'
|
|
||||||
'type_de_champ_group'
|
|
||||||
else
|
|
||||||
field['table']
|
|
||||||
end
|
|
||||||
end.reduce(dossiers) do |dossiers, (group_key, fields)|
|
|
||||||
if group_key != 'type_de_champ_group'
|
|
||||||
dossiers.includes(fields.first['table'])
|
|
||||||
else
|
|
||||||
if fields.any? { |field| field['table'] == 'type_de_champ' }
|
|
||||||
dossiers = dossiers.includes(:champs).references(:champs)
|
|
||||||
end
|
|
||||||
|
|
||||||
if fields.any? { |field| field['table'] == 'type_de_champ_private' }
|
relations_to_include = fields_to_eager_load
|
||||||
dossiers = dossiers.includes(:champs_private).references(:champs_private)
|
.pluck('table')
|
||||||
end
|
.map do |table|
|
||||||
|
case table
|
||||||
dossiers.where(champs: { type_de_champ_id: fields.pluck('column') })
|
when 'type_de_champ'
|
||||||
|
:champs
|
||||||
|
when 'type_de_champ_private'
|
||||||
|
:champs_private
|
||||||
|
else
|
||||||
|
table
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
.uniq
|
||||||
|
|
||||||
|
champ_fields = fields_to_eager_load.select do |field|
|
||||||
|
['type_de_champ', 'type_de_champ_private'].include?(field['table'])
|
||||||
|
end
|
||||||
|
|
||||||
|
if champ_fields.present?
|
||||||
|
dossiers
|
||||||
|
.includes(relations_to_include)
|
||||||
|
.where(champs: { type_de_champ_id: champ_fields.pluck('column') })
|
||||||
|
else
|
||||||
|
dossiers.includes(relations_to_include)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
Loading…
Reference in a new issue