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 end
def champs def champs
@procedure = Procedure.includes(draft_revision: { @procedure = Procedure.includes_for_champ_public_edition.find(@procedure.id)
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)
end end
def annotations def annotations
@procedure = Procedure.includes(draft_revision: { @procedure = Procedure.includes_for_champ_private_edition.find(@procedure.id)
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)
end end
def detail def detail

View file

@ -1,6 +1,7 @@
module Administrateurs module Administrateurs
class TypesDeChampController < AdministrateurController class TypesDeChampController < AdministrateurController
before_action :retrieve_procedure before_action :retrieve_procedure
before_action :preload_procedure
after_action :reset_procedure, only: [:create, :update, :destroy, :piece_justificative_template] after_action :reset_procedure, only: [:create, :update, :destroy, :piece_justificative_template]
def create def create
@ -169,5 +170,9 @@ module Administrateurs
def draft def draft
@procedure.draft_revision @procedure.draft_revision
end end
def preload_procedure
@procedure = Procedure.includes_for_champ_private_edition.find(@procedure.id)
end
end 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 :libelle, presence: true, allow_blank: false, allow_nil: false
validates :description, presence: true, allow_blank: false, allow_nil: false validates :description, presence: true, allow_blank: false, allow_nil: false
validates :administrateurs, presence: true validates :administrateurs, presence: true