From 16bfc6eba2daec2881ecd16e2562e85fb508fcbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BF=E3=81=A6=E3=82=8B=E3=81=9E?= Date: Wed, 11 Feb 2026 17:42:34 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=AC=E3=83=95=E3=82=A3=E3=82=AF?= =?UTF-8?q?=E3=82=B9=E3=81=AE=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3=EF=BC=88?= =?UTF-8?q?#124=EF=BC=89=20(#261)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #124 Co-authored-by: miteruzo Reviewed-on: https://git.miteruzo.com/miteruzo/btrc-hub/pulls/261 --- backend/app/models/tag.rb | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/backend/app/models/tag.rb b/backend/app/models/tag.rb index 60cc79b..ce064a4 100644 --- a/backend/app/models/tag.rb +++ b/backend/app/models/tag.rb @@ -46,12 +46,16 @@ class Tag < ApplicationRecord scope :nico_tags, -> { where(category: :nico) } CATEGORY_PREFIXES = { - 'gen:' => :general, - 'djk:' => :deerjikist, - 'meme:' => :meme, - 'chr:' => :character, - 'mtr:' => :material, - 'meta:' => :meta }.freeze + 'general:' => :general, + 'gen:' => :general, + 'deerjikist:' => :deerjikist, + 'djk:' => :deerjikist, + 'meme:' => :meme, + 'character:' => :character, + 'chr:' => :character, + 'material:' => :material, + 'mtr:' => :material, + 'meta:' => :meta }.freeze def name= val (self.tag_name ||= build_tag_name).name = val @@ -78,13 +82,13 @@ class Tag < ApplicationRecord end def self.normalise_tags tag_names, with_tagme: true, deny_nico: true - if deny_nico && tag_names.any? { |n| n.start_with?('nico:') } + if deny_nico && tag_names.any? { |n| n.downcase.start_with?('nico:') } raise NicoTagNormalisationError end tags = tag_names.map do |name| - pf, cat = CATEGORY_PREFIXES.find { |p, _| name.start_with?(p) } || ['', nil] - name = TagName.canonicalise(name.delete_prefix(pf)).first + pf, cat = CATEGORY_PREFIXES.find { |p, _| name.downcase.start_with?(p) } || ['', nil] + name = TagName.canonicalise(name.sub(/\A#{ pf }/i, '')).first find_or_create_by_tag_name!(name, category: (cat || :general)).tap do |tag| if cat && tag.category != cat tag.update!(category: cat) @@ -134,8 +138,8 @@ class Tag < ApplicationRecord def nico_tag_name_must_start_with_nico n = name.to_s - if ((category == 'nico' && !(n.start_with?('nico:'))) || - (category != 'nico' && n.start_with?('nico:'))) + if ((category == 'nico' && !(n.downcase.start_with?('nico:'))) || + (category != 'nico' && n.downcase.start_with?('nico:'))) errors.add :name, 'ニコニコ・タグの命名規則に反してゐます.' end end