perf(types_de_champs_controller): preload procedure to avoid n+1 query in champs_summary

This commit is contained in:
Martin 2024-01-19 10:40:03 +01:00
parent 261932b56f
commit 50d148d412
3 changed files with 35 additions and 31 deletions

View file

@ -362,40 +362,11 @@ module Administrateurs
end
def champs
@procedure = Procedure.includes(draft_revision: {
revision_types_de_champ: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
},
revision_types_de_champ_public: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
},
procedure: []
}).find(@procedure.id)
@procedure = Procedure.includes_for_champ_public_edition.find(@procedure.id)
end
def annotations
@procedure = Procedure.includes(draft_revision: {
revision_types_de_champ: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
},
revision_types_de_champ_private: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
},
revision_types_de_champ_public: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
},
procedure: []
}).find(@procedure.id)
@procedure = Procedure.includes_for_champ_private_edition.find(@procedure.id)
end
def detail

View file

@ -1,6 +1,7 @@
module Administrateurs
class TypesDeChampController < AdministrateurController
before_action :retrieve_procedure
before_action :preload_procedure
after_action :reset_procedure, only: [:create, :update, :destroy, :piece_justificative_template]
def create
@ -169,5 +170,9 @@ module Administrateurs
def draft
@procedure.draft_revision
end
def preload_procedure
@procedure = Procedure.includes_for_champ_private_edition.find(@procedure.id)
end
end
end

View file

@ -237,6 +237,34 @@ class Procedure < ApplicationRecord
)
}
scope :includes_for_champ_public_edition, -> {
includes(draft_revision: {
revision_types_de_champ: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
},
revision_types_de_champ_public: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
},
procedure: []
})
}
scope :includes_for_champ_private_edition, -> {
includes_for_champ_public_edition.includes(
draft_revision: {
revision_types_de_champ_private: {
type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] },
revision: [],
procedure: []
}
}
)
}
validates :libelle, presence: true, allow_blank: false, allow_nil: false
validates :description, presence: true, allow_blank: false, allow_nil: false
validates :administrateurs, presence: true