From 0636eb855eb83bf655b638daba707073ca2bccef Mon Sep 17 00:00:00 2001 From: miteruzo Date: Tue, 27 Jan 2026 00:42:30 +0900 Subject: [PATCH] #231 --- backend/app/models/user_ip.rb | 2 + ...7000900_change_user_ips_to_composite_pk.rb | 47 +++++++++++++++++++ backend/db/schema.rb | 5 +- 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb diff --git a/backend/app/models/user_ip.rb b/backend/app/models/user_ip.rb index 80cf47d..61d2685 100644 --- a/backend/app/models/user_ip.rb +++ b/backend/app/models/user_ip.rb @@ -1,4 +1,6 @@ class UserIp < ApplicationRecord + self.primary_key = :user_id, :ip_address_id + belongs_to :user belongs_to :ip_address diff --git a/backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb b/backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb new file mode 100644 index 0000000..be525e2 --- /dev/null +++ b/backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb @@ -0,0 +1,47 @@ +class ChangeUserIpsToCompositePk < ActiveRecord::Migration[8.0] + def up + execute <<~SQL + ALTER TABLE + user_ips + MODIFY COLUMN id BIGINT NOT NULL + ; + SQL + + execute <<~SQL + ALTER TABLE + user_ips + DROP PRIMARY KEY + ; + SQL + + remove_column :user_ips, :id + + execute <<~SQL + ALTER TABLE + user_ips + ADD PRIMARY KEY (user_id, ip_address_id) + ; + SQL + + remove_index :user_ips, name: 'index_user_ips_on_user_id' + end + + def down + execute <<~SQL + ALTER TABLE + user_ips + DROP PRIMARY KEY + ; + SQL + + execute <<~SQL + ALTER TABLE + user_ips + ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT FIRST + , ADD PRIMARY KEY (id) + ; + SQL + + add_index :user_ips, :user_id, name: 'index_user_ips_on_user_id' + end +end diff --git a/backend/db/schema.rb b/backend/db/schema.rb index 180735e..7ae8e2e 100644 --- a/backend/db/schema.rb +++ b/backend/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2026_01_26_124100) do +ActiveRecord::Schema[8.0].define(version: 2026_01_27_000900) do create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false @@ -144,13 +144,12 @@ ActiveRecord::Schema[8.0].define(version: 2026_01_26_124100) do t.index ["tag_name_id"], name: "index_tags_on_tag_name_id", unique: true end - create_table "user_ips", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + create_table "user_ips", primary_key: ["user_id", "ip_address_id"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.bigint "user_id", null: false t.bigint "ip_address_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["ip_address_id"], name: "index_user_ips_on_ip_address_id" - t.index ["user_id"], name: "index_user_ips_on_user_id" end create_table "user_post_views", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| -- 2.34.1