このコミットが含まれているのは:
2026-10-15 20:02:34 +09:00
コミット c142f08e6c
10個のファイルの変更、111行の追加、47行の削除
+4 -3
ファイルの表示
@@ -305,9 +305,10 @@ class Tag < ApplicationRecord
end
TagVersioning.record!(source_tag, event_type: :discard, created_by_user:)
source_tag.tag_names.update_all(tag_id: target_tag.id, primary_flg: false,
auto_generated: false,
updated_at: Time.current)
target_languages = target_tag.tag_names.where(primary_flg: true).pluck(:language_code)
source_tag.tag_names.where(language_code: target_languages)
.update_all(primary_flg: false, auto_generated: false, updated_at: Time.current)
source_tag.tag_names.update_all(tag_id: target_tag.id, updated_at: Time.current)
source_tag.destroy!
TagVersioning.record!(target_tag, event_type: :update, created_by_user:)
+1 -1
ファイルの表示
@@ -1,3 +1,3 @@
class TagDescriptionVersion < ApplicationRecord
;
before_create { SharedResourceIdAllocator.assign!(self) }
end
+1 -1
ファイルの表示
@@ -11,7 +11,7 @@ class TagGroup < ApplicationRecord
has_many :placements, -> { order(:position) },
class_name: 'TagGroupPlacement', dependent: :delete_all
has_many :versions, -> { order(:version_no) },
class_name: 'TagGroupVersion', dependent: :delete_all
class_name: 'TagGroupVersion'
validates :name, presence: true, uniqueness: true, length: { maximum: 255 }
validates :version_no, numericality: { only_integer: true, greater_than: 0 }
+2
ファイルの表示
@@ -1,6 +1,8 @@
class TagGroupVersion < ApplicationRecord
include VersionRecord
before_create { SharedResourceIdAllocator.assign!(self) }
belongs_to :tag_group
scope :ordered, -> { order(:version_no) }
+25 -20
ファイルの表示
@@ -16,31 +16,36 @@ class TagNameSanitisationRule < ApplicationRecord
def apply!
Language.find_each do |language|
TagName.where(language:).find_each do |tn|
name = sanitise(tn.name)
next if name == tn.name
TagName.where(language:).find_each do |candidate|
TagName.transaction do
tn = TagName.find_by(id: candidate.id)
next unless tn
name = sanitise(tn.name)
next if name == tn.name
existing_tn = TagName.find_by(language:, name:)
if existing_tn
unless existing_tn.primary_flg
existing_tn = TagName.find_by!(language:,
tag_id: existing_tn.tag_id,
primary_flg: true)
source_tag = tn.tag
target_tag = existing_tn ? existing_tn.tag : source_tag
[source_tag, target_tag].uniq(&:id).sort_by(&:id).each(&:lock!)
TagVersioning.ensure_snapshot!(source_tag, created_by_user: nil)
if existing_tn && target_tag != source_tag
Tag.merge_tags!(target_tag, source_tag)
tn.reload.destroy!
elsif existing_tn
if tn.primary?
existing_tn.destroy!
tn.update_columns(name:, updated_at: Time.current)
else
tn.destroy!
end
next if existing_tn.id == tn.id
existing_tag = existing_tn.tag
source_tag = tn.tag
Tag.merge_tags!(existing_tag, source_tag) if existing_tag != source_tag
tn.destroy!
next
else
# TagName 側の自動サニタイズを回避
tn.update_columns(name:, updated_at: Time.current)
end
# TagName 側の自動サニタイズを回避
tn.update_columns(name:, updated_at: Time.current)
TagVersioning.record!(target_tag, event_type: :update, created_by_user: nil)
end
end
end