diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2019-07-29 20:40:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-29 20:40:21 +0200 |
commit | e136112ab76a37cbde5c1bcfeb562c8e0a5b5116 (patch) | |
tree | db91ad2e6b5579c6682b4cab0c3488bad506595d /app/models | |
parent | aefeb65656605f3e32021acbc78c8e21307921fd (diff) |
Fix tag normalization and migration not removing duplicate tags (#11441)
Fix #11428
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/tag.rb | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/app/models/tag.rb b/app/models/tag.rb index 972242064..46e3a3ec0 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -65,7 +65,7 @@ class Tag < ApplicationRecord class << self def find_or_create_by_names(name_or_names) - Array(name_or_names).map(&method(:normalize)).uniq.map do |normalized_name| + Array(name_or_names).map(&method(:normalize)).uniq { |str| str.mb_chars.downcase.to_s }.map do |normalized_name| tag = matching_name(normalized_name).first || create(name: normalized_name) yield tag if block_given? @@ -77,7 +77,7 @@ class Tag < ApplicationRecord def search_for(term, limit = 5, offset = 0) pattern = sanitize_sql_like(normalize(term.strip)) + '%' - Tag.where(arel_table[:name].lower.matches(pattern.downcase)) + Tag.where(arel_table[:name].lower.matches(pattern.mb_chars.downcase.to_s)) .order(:name) .limit(limit) .offset(offset) @@ -92,7 +92,7 @@ class Tag < ApplicationRecord end def matching_name(name_or_names) - names = Array(name_or_names).map { |name| normalize(name).downcase } + names = Array(name_or_names).map { |name| normalize(name).mb_chars.downcase.to_s } if names.size == 1 where(arel_table[:name].lower.eq(names.first)) @@ -104,7 +104,7 @@ class Tag < ApplicationRecord private def normalize(str) - str.gsub(/\A#/, '').mb_chars.to_s + str.gsub(/\A#/, '') end end |