From 426f1c20b19e5bd98ee0ab8bd5f8851b683a79c6 Mon Sep 17 00:00:00 2001 From: charlieablett Date: Fri, 14 Jun 2019 10:20:03 +1200 Subject: Remove N+1 query for project and group boards - Add test for N+1 queries - Add destroyable lists scope to Board and List - Preload lists for both project and group boards --- app/models/board.rb | 3 +++ 1 file changed, 3 insertions(+) (limited to 'app/models') diff --git a/app/models/board.rb b/app/models/board.rb index e08db764f65..891d26897ed 100644 --- a/app/models/board.rb +++ b/app/models/board.rb @@ -5,10 +5,13 @@ class Board < ApplicationRecord belongs_to :project has_many :lists, -> { order(:list_type, :position) }, dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent + has_many :destroyable_lists, -> { destroyable }, class_name: "List" validates :project, presence: true, if: :project_needed? validates :group, presence: true, unless: :project + scope :with_associations, -> { preload(:destroyable_lists) } + def project_needed? !group end -- cgit v1.2.1 From 82b87ae509e744dab135573da1f9b8ada4f81ed9 Mon Sep 17 00:00:00 2001 From: charlieablett Date: Wed, 26 Jun 2019 21:49:53 +1200 Subject: Compound lists scopes to preserve ordering --- app/models/board.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models') diff --git a/app/models/board.rb b/app/models/board.rb index 891d26897ed..cde5ee7c5b5 100644 --- a/app/models/board.rb +++ b/app/models/board.rb @@ -5,7 +5,7 @@ class Board < ApplicationRecord belongs_to :project has_many :lists, -> { order(:list_type, :position) }, dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent - has_many :destroyable_lists, -> { destroyable }, class_name: "List" + has_many :destroyable_lists, -> { lists.destroyable }, class_name: "List" validates :project, presence: true, if: :project_needed? validates :group, presence: true, unless: :project -- cgit v1.2.1 From 04d2d8f9b7e8593cb0ea3d8db7b57b843387fa2b Mon Sep 17 00:00:00 2001 From: charlieablett Date: Thu, 27 Jun 2019 10:32:51 +1200 Subject: Move order lambda to list scope - apply ordering to both list scopes in `Board` --- app/models/board.rb | 4 ++-- app/models/list.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'app/models') diff --git a/app/models/board.rb b/app/models/board.rb index cde5ee7c5b5..50b6ca9b70f 100644 --- a/app/models/board.rb +++ b/app/models/board.rb @@ -4,8 +4,8 @@ class Board < ApplicationRecord belongs_to :group belongs_to :project - has_many :lists, -> { order(:list_type, :position) }, dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent - has_many :destroyable_lists, -> { lists.destroyable }, class_name: "List" + has_many :lists, -> { ordered }, dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent + has_many :destroyable_lists, -> { destroyable.ordered }, class_name: "List" validates :project, presence: true, if: :project_needed? validates :group, presence: true, unless: :project diff --git a/app/models/list.rb b/app/models/list.rb index 17b1a8510cf..d28a9bda82d 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -16,6 +16,7 @@ class List < ApplicationRecord scope :destroyable, -> { where(list_type: list_types.slice(*destroyable_types).values) } scope :movable, -> { where(list_type: list_types.slice(*movable_types).values) } scope :preload_associations, -> { preload(:board, :label) } + scope :ordered, -> { order(:list_type, :position) } class << self def destroyable_types -- cgit v1.2.1