Dossier: remove uncessary query on order_champ_v2

This commit is contained in:
simon lehericey 2018-03-04 14:39:08 +01:00
parent 8ac5415ce0
commit 66a113c7db
4 changed files with 18 additions and 6 deletions

View file

@ -95,7 +95,7 @@ module NewUser
end
def dossier_with_champs
@dossier_with_champs ||= current_user.dossiers.includes(champs: :type_de_champ).find(params[:id])
@dossier_with_champs ||= current_user.dossiers.with_ordered_champs.find(params[:id])
end
def ensure_ownership!

View file

@ -60,6 +60,7 @@ class Dossier < ApplicationRecord
scope :en_cours, -> { not_archived.state_en_construction_ou_instruction }
scope :without_followers, -> { left_outer_joins(:follows).where(follows: { id: nil }) }
scope :followed_by, -> (gestionnaire) { joins(:follows).where(follows: { gestionnaire: gestionnaire }) }
scope :with_ordered_champs, -> { includes(champs: :type_de_champ).order('types_de_champ.order_place') }
accepts_nested_attributes_for :individual
@ -108,10 +109,6 @@ class Dossier < ApplicationRecord
champs.joins(', types_de_champ').where("champs.type_de_champ_id = types_de_champ.id AND types_de_champ.procedure_id = #{procedure.id}").order('order_place')
end
def ordered_champs_v2
champs.includes(:type_de_champ).order('types_de_champ.order_place')
end
def ordered_champs_private
# TODO: use the line below when the procedure preview does not leak champ with dossier_id == 0
# champs_private.includes(:type_de_champ).order('types_de_champ.order_place')

View file

@ -7,7 +7,7 @@
%p.thanks Les champs avec une asterisque (*) sont obligatoires.
= form_for @dossier, html: { class: 'form', multipart: true } do |f|
= f.fields_for :champs, @dossier.ordered_champs_v2 do |champ_form|
= f.fields_for :champs, @dossier.champs do |champ_form|
- champ = champ_form.object
= render partial: "shared/dossiers/editable_champs/editable_champ",
locals: { champ: champ, form: champ_form }

View file

@ -10,6 +10,21 @@ describe Dossier do
it { expect(Dossier.without_followers.to_a).to eq([dossier2]) }
end
describe 'with_ordered_champs' do
let(:procedure) { create(:procedure) }
let(:dossier) { Dossier.create(user: create(:user), procedure: procedure) }
before do
create(:type_de_champ, libelle: 'l1', order_place: 1, procedure: procedure)
create(:type_de_champ, libelle: 'l3', order_place: 3, procedure: procedure)
create(:type_de_champ, libelle: 'l2', order_place: 2, procedure: procedure)
end
it do
expect(Dossier.with_ordered_champs.find(dossier.id).champs.map(&:libelle)).to match(%w(l1 l2 l3))
end
end
describe 'methods' do
let(:dossier) { create(:dossier, :with_entreprise, user: user) }