From 7c730e9041b5cf1de0741925b7ebbaa43d7d0f22 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 3 Dec 2025 10:39:01 -0500 Subject: [PATCH] Use `normalizes` API for Tag `display_name` value (#35797) --- app/models/tag.rb | 7 +++---- spec/models/tag_spec.rb | 5 +++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/models/tag.rb b/app/models/tag.rb index c59b0f36a8..9924d132e6 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -67,6 +67,8 @@ class Tag < ApplicationRecord } scope :matches_name, ->(term) { where(arel_table[:name].lower.matches(arel_table.lower("#{sanitize_sql_like(Tag.normalize(term))}%"), nil, true)) } # Search with case-sensitive to use B-tree index + normalizes :display_name, with: ->(value) { value.gsub(HASHTAG_INVALID_CHARS_RE, '') } + update_index('tags', :self) def to_param @@ -113,10 +115,7 @@ class Tag < ApplicationRecord names.map do |(normalized_name, display_name)| tag = begin - matching_name(normalized_name).first || create!( - name: normalized_name, - display_name: display_name.gsub(HASHTAG_INVALID_CHARS_RE, '') - ) + matching_name(normalized_name).first || create!(name: normalized_name, display_name:) rescue ActiveRecord::RecordNotUnique find_normalized(normalized_name) end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 9a68ae36d6..06ed7a42c6 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -57,6 +57,11 @@ RSpec.describe Tag do end end + describe 'Normalizations' do + it { is_expected.to normalize(:display_name).from('#HelloWorld').to('HelloWorld') } + it { is_expected.to normalize(:display_name).from('Hello❤️World').to('HelloWorld') } + end + describe 'HASHTAG_RE' do subject { described_class::HASHTAG_RE }