From c4a67e6381b84c91ff8140d284f246bcdf7505ca Mon Sep 17 00:00:00 2001 From: Urban Hafner Date: Thu, 29 Feb 2024 08:35:19 +0100 Subject: [PATCH] Use tags on macro cluster to display tags and search for them --- app/controllers/inks_controller.rb | 13 +++---------- app/models/macro_cluster.rb | 4 ---- app/views/brands/show.html.slim | 6 ++++++ app/views/inks/index.html.slim | 12 ++++++------ app/workers/update_macro_cluster.rb | 3 ++- 5 files changed, 17 insertions(+), 21 deletions(-) diff --git a/app/controllers/inks_controller.rb b/app/controllers/inks_controller.rb index 904dd4636..9bd8355b4 100644 --- a/app/controllers/inks_controller.rb +++ b/app/controllers/inks_controller.rb @@ -8,11 +8,7 @@ def index end def show - @ink = - MacroCluster - .where(id: params[:id]) - .includes(public_collected_inks: { taggings: :tag }) - .first + @ink = MacroCluster.find(params[:id]) @description = build_description add_breadcrumb "Inks", "/brands" add_breadcrumb "#{@ink.brand_cluster.name}", brand_path(@ink.brand_cluster) @@ -47,12 +43,9 @@ def find_clusters if params[:q].present? MacroCluster.full_text_search(params[:q]) else - collected_inks = - CollectedInk.where(private: false).tagged_with(names: [params[:tag]]) MacroCluster - .distinct - .joins(micro_clusters: :collected_inks) - .where(collected_inks: { id: collected_inks.pluck(:id) }) + .where("? = ANY(tags)", params[:tag]) + .includes(:brand_cluster) .order(:brand_name, :line_name, :ink_name) end end diff --git a/app/models/macro_cluster.rb b/app/models/macro_cluster.rb index 219215c69..1630fe591 100644 --- a/app/models/macro_cluster.rb +++ b/app/models/macro_cluster.rb @@ -157,8 +157,4 @@ def to_param def name [brand_name, line_name, ink_name].reject(&:blank?).join(" ") end - - def tags - public_collected_inks.flat_map(&:taggings).map(&:tag).map(&:name).uniq.sort - end end diff --git a/app/views/brands/show.html.slim b/app/views/brands/show.html.slim index 10b7276bf..4fc38a8b5 100644 --- a/app/views/brands/show.html.slim +++ b/app/views/brands/show.html.slim @@ -36,6 +36,7 @@ div class="fpc-table fpc-table--full-width fpc-inks-table fpc-scroll-shadow" th Brand th Line th colspan="2" Ink + th Tags th - if user_signed_in? th @@ -48,6 +49,11 @@ div class="fpc-table fpc-table--full-width fpc-inks-table fpc-scroll-shadow" td div style="background-color:#{ink.color};width:45px;height:45px;" td= ink.ink_name + td + ul class="tags" + - ink.tags.each do |tag| + li class="tag badge text-bg-secondary" + a href="#{inks_path(tag: tag)}"= tag td= link_to "Details", brand_ink_url(@brand, ink) - if user_signed_in? td diff --git a/app/views/inks/index.html.slim b/app/views/inks/index.html.slim index cc0088fc8..77aaf096e 100644 --- a/app/views/inks/index.html.slim +++ b/app/views/inks/index.html.slim @@ -12,7 +12,7 @@ div class="fpc-table fpc-table--full-width fpc-inks-table fpc-scroll-shadow" th Brand th Line th colspan="2" Ink - / th Tags + th Tags th - if user_signed_in? th @@ -24,11 +24,11 @@ div class="fpc-table fpc-table--full-width fpc-inks-table fpc-scroll-shadow" td div style="background-color:#{ink.color};width:45px;height:45px;" td= ink.ink_name - / td - / ul class="tags" - / - ink.tags.each do |tag| - / li class="tag badge text-bg-secondary" - / a href="#{inks_path(tag: tag)}"= tag + td + ul class="tags" + - ink.tags.each do |tag| + li class="tag badge text-bg-secondary" + a href="#{inks_path(tag: tag)}"= tag td - if ink.brand_cluster.present? = link_to "Details", brand_ink_path(ink.brand_cluster, ink) diff --git a/app/workers/update_macro_cluster.rb b/app/workers/update_macro_cluster.rb index 6a1520e07..d8d52f0a6 100644 --- a/app/workers/update_macro_cluster.rb +++ b/app/workers/update_macro_cluster.rb @@ -18,7 +18,8 @@ def perform(id) attr_accessor :cluster def update_tags - cluster.tags = Gutentag::Tag.names_for_scope(cluster.public_collected_inks) + cluster.tags = + Gutentag::Tag.names_for_scope(cluster.public_collected_inks).to_a end def update_names