初めに…
データベースでテーブルを作成すると必ず作成される主キー( :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`
となり、ちゃんと主キーとした値が読み込まれてることが分かります。