From 48d3f7708e4f7e92ea920d440ad18db6fc9d95ba Mon Sep 17 00:00:00 2001 From: miteruzo Date: Tue, 27 Jan 2026 01:02:33 +0900 Subject: [PATCH] #230 --- backend/app/models/user_post_view.rb | 2 + ..._change_user_post_views_to_composite_pk.rb | 47 +++++++++++++++++++ backend/db/schema.rb | 5 +- 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 backend/db/migrate/20260127005300_change_user_post_views_to_composite_pk.rb diff --git a/backend/app/models/user_post_view.rb b/backend/app/models/user_post_view.rb index 2f6239f..ff604a7 100644 --- a/backend/app/models/user_post_view.rb +++ b/backend/app/models/user_post_view.rb @@ -1,4 +1,6 @@ class UserPostView < ApplicationRecord + self.primary_key = :user_id, :post_id + belongs_to :user belongs_to :post diff --git a/backend/db/migrate/20260127005300_change_user_post_views_to_composite_pk.rb b/backend/db/migrate/20260127005300_change_user_post_views_to_composite_pk.rb new file mode 100644 index 0000000..9f2d107 --- /dev/null +++ b/backend/db/migrate/20260127005300_change_user_post_views_to_composite_pk.rb @@ -0,0 +1,47 @@ +class ChangeUserPostViewsToCompositePk < ActiveRecord::Migration[8.0] + def up + execute <<~SQL + ALTER TABLE + user_post_views + MODIFY COLUMN id BIGINT NOT NULL + ; + SQL + + execute <<~SQL + ALTER TABLE + user_post_views + DROP PRIMARY KEY + ; + SQL + + remove_column :user_post_views, :id + + execute <<~SQL + ALTER TABLE + user_post_views + ADD PRIMARY KEY (user_id, post_id) + ; + SQL + + remove_index :user_post_views, name: 'index_user_post_views_on_user_id' + end + + def down + execute <<~SQL + ALTER TABLE + user_post_views + DROP PRIMARY KEY + ; + SQL + + execute <<~SQL + ALTER TABLE + user_post_views + ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT FIRST + , ADD PRIMARY KEY (id) + ; + SQL + + add_index :user_post_views, :user_id, name: 'index_user_post_views_on_user_id' + end +end diff --git a/backend/db/schema.rb b/backend/db/schema.rb index 7ae8e2e..7a53c81 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_27_000900) do +ActiveRecord::Schema[8.0].define(version: 2026_01_27_005300) 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 @@ -152,13 +152,12 @@ ActiveRecord::Schema[8.0].define(version: 2026_01_27_000900) do t.index ["ip_address_id"], name: "index_user_ips_on_ip_address_id" end - create_table "user_post_views", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + create_table "user_post_views", primary_key: ["user_id", "post_id"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.bigint "user_id", null: false t.bigint "post_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["post_id"], name: "index_user_post_views_on_post_id" - t.index ["user_id"], name: "index_user_post_views_on_user_id" end create_table "users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| -- 2.34.1