0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データベース(MySQL)の主キーを任意のカラムに変更する。

Posted at

初めに…

データベースでテーブルを作成すると必ず作成される主キー( :id カラム)ですが、デフォルトではレコードに登録された順番に1番から登録されていきます。ところが、既存のサービスを見てみると https://www.uniqlo.com/jp/ja/products/E428313-000 のように商品番号が URL に入っていたり、ユーザー情報を閲覧できるページではユーザー名がパラメータとなっていたりします。
そこで、本投稿ではデータベース(MySQL)で主キーを任意のカラムに変更する方法をご紹介します。

データベース (MySQL) の主キーを任意のカラムに変更する方法

db/migrate/_マイグレーションファイル.rb
class    < ActiveRecord::Migration[5.2]
  def change
    create_table :テーブル名, id: false, primary_key: :主キーにするカラム名 do |t|
      # `id: false` は、このテーブルでは `:id` カラムを作成しない。という記述です。
      # `primary_key:` に主キーにするカラム名を指定する。
      t.timestamps
    end
  end
end
app/models/モデル名.rb
class モデル名 < ApplicationRecord
  self.primary_key = "主キーにするカラム名"
    # モデルファイルに この記述をすることで主キー(プライマリーキー)となるカラムを指定する。
end
  • モデルファイルに主キーとなるカラムを記述しておくことで、コントローラーから モデル名.find(params[:id]) により :id
    のレコードを呼び出すと…
サーバーログ
Parameters: {"id"=>"値"}
SELECT  `テーブル名`.* FROM `テーブル名` WHERE `テーブル名`.`主キーとするカラム名` =  LIMIT 1`

となり、ちゃんと主キーとした値が読み込まれてることが分かります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?