Fix tag normalization and migration not removing duplicate tags (#11441)
Fix #11428
This commit is contained in:
parent
aefeb65656
commit
e136112ab7
3 changed files with 51 additions and 4 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue