hensei-api/db/data/20251230000002_migrate_ax_modifiers_to_fk.rb

64 lines
2.4 KiB
Ruby

# frozen_string_literal: true
class MigrateAxModifiersToFk < ActiveRecord::Migration[8.0]
def up
# Build lookup cache: game_skill_id -> weapon_stat_modifier.id
modifier_lookup = WeaponStatModifier.pluck(:game_skill_id, :id).to_h
# Migrate CollectionWeapon ax_modifier1
CollectionWeapon.where.not(ax_modifier1: nil).find_each do |cw|
modifier_id = modifier_lookup[cw.ax_modifier1]
if modifier_id
cw.update_columns(ax_modifier1_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier1=#{cw.ax_modifier1} on CollectionWeapon##{cw.id}"
end
end
# Migrate CollectionWeapon ax_modifier2
CollectionWeapon.where.not(ax_modifier2: nil).find_each do |cw|
modifier_id = modifier_lookup[cw.ax_modifier2]
if modifier_id
cw.update_columns(ax_modifier2_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier2=#{cw.ax_modifier2} on CollectionWeapon##{cw.id}"
end
end
# Migrate GridWeapon ax_modifier1
GridWeapon.where.not(ax_modifier1: nil).find_each do |gw|
modifier_id = modifier_lookup[gw.ax_modifier1]
if modifier_id
gw.update_columns(ax_modifier1_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier1=#{gw.ax_modifier1} on GridWeapon##{gw.id}"
end
end
# Migrate GridWeapon ax_modifier2
GridWeapon.where.not(ax_modifier2: nil).find_each do |gw|
modifier_id = modifier_lookup[gw.ax_modifier2]
if modifier_id
gw.update_columns(ax_modifier2_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier2=#{gw.ax_modifier2} on GridWeapon##{gw.id}"
end
end
end
def down
# Reverse: copy FK back to integer columns
WeaponStatModifier.find_each do |modifier|
next unless modifier.game_skill_id
CollectionWeapon.where(ax_modifier1_ref_id: modifier.id)
.update_all(ax_modifier1: modifier.game_skill_id)
CollectionWeapon.where(ax_modifier2_ref_id: modifier.id)
.update_all(ax_modifier2: modifier.game_skill_id)
GridWeapon.where(ax_modifier1_ref_id: modifier.id)
.update_all(ax_modifier1: modifier.game_skill_id)
GridWeapon.where(ax_modifier2_ref_id: modifier.id)
.update_all(ax_modifier2: modifier.game_skill_id)
end
end
end