diff options
author | Douwe Maan <douwe@selenight.nl> | 2017-05-29 16:07:57 -0500 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2017-05-29 16:08:05 -0500 |
commit | e53169c9702f1f4f25f8f1e91ed9ab7ace0a3d41 (patch) | |
tree | 6a051e9da6794f0fc70fcf0dca018236dfb3dc30 /app/models | |
parent | 1ac12698c613774bdace72475573916c142a07e4 (diff) | |
download | gitlab-ce-e53169c9702f1f4f25f8f1e91ed9ab7ace0a3d41.tar.gz |
Resolve N+1 query issue with discussions
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/concerns/noteable.rb | 7 | ||||
-rw-r--r-- | app/models/discussion.rb | 3 |
2 files changed, 8 insertions, 2 deletions
diff --git a/app/models/concerns/noteable.rb b/app/models/concerns/noteable.rb index dd1e6630642..c7bdc997eca 100644 --- a/app/models/concerns/noteable.rb +++ b/app/models/concerns/noteable.rb @@ -43,7 +43,12 @@ module Noteable end def resolvable_discussions - @resolvable_discussions ||= discussion_notes.resolvable.discussions(self) + @resolvable_discussions ||= + if defined?(@discussions) + @discussions.select(&:resolvable?) + else + discussion_notes.resolvable.discussions(self) + end end def discussions_resolvable? diff --git a/app/models/discussion.rb b/app/models/discussion.rb index 0b6b920ed66..6a92b8eef66 100644 --- a/app/models/discussion.rb +++ b/app/models/discussion.rb @@ -21,7 +21,8 @@ class Discussion end def self.build_collection(notes, context_noteable = nil) - notes.group_by { |n| n.discussion_id(context_noteable) }.values.map { |notes| build(notes, context_noteable) } + grouped_notes = notes.includes(:noteable).group_by { |n| n.discussion_id(context_noteable) } + grouped_notes.values.map { |notes| build(notes, context_noteable) } end # Returns an alphanumeric discussion ID based on `build_discussion_id` |