summaryrefslogtreecommitdiff
path: root/app/models/concerns/taggable_queries.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/concerns/taggable_queries.rb')
-rw-r--r--app/models/concerns/taggable_queries.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/app/models/concerns/taggable_queries.rb b/app/models/concerns/taggable_queries.rb
new file mode 100644
index 00000000000..2897e5e6420
--- /dev/null
+++ b/app/models/concerns/taggable_queries.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+module TaggableQueries
+ extend ActiveSupport::Concern
+
+ class_methods do
+ # context is a name `acts_as_taggable context`
+ def arel_tag_names_array(context = :tags)
+ ActsAsTaggableOn::Tagging
+ .joins(:tag)
+ .where("taggings.taggable_id=#{quoted_table_name}.id") # rubocop:disable GitlabSecurity/SqlInjection
+ .where(taggings: { context: context, taggable_type: polymorphic_name })
+ .select('COALESCE(array_agg(tags.name ORDER BY name), ARRAY[]::text[])')
+ end
+ end
+end