Railsの主キー
基本的にはRailsでは複合キーが認められておらず、主キーにはid(自動で付加される)が使われます。
主キーを別に設定する。
もし、id以外を主キーにしたい場合は、create_tableの箇所に「id: false」を指定して、主キーに設定したいカラムに対して「primary_key: true」を設定します。
1 2 3 4 5 6 7 8 9 10 |
class CreateUsers < ActiveRecord::Migration[6.0] def change create_table :users, id: false do |t| t.integer :user_id, null: false, primary_key: true t.string :name t.timestamps end end end |
複合キーを設定する。(composite_primary_keys)
基本的にRailsでは複合キーは許されていないですが、下記のような理由により複合キーを使いたいケースもあるのではないかと思います。
- 無駄なカラムが増える。
- システム移行の際に不要なカラムを増やしたくない。
そうした場合においてはcomposite_primary_keysというGemを使います。
実装方法
先に下記のような感じでテーブルを作っておきます。(マイグレーションファイルでは複合キーは作れないようになっているようで、直接SQLを実行します。)
1 2 3 4 5 6 7 |
CREATE TABLE `テーブル名` ( `キー1` string(255) NOT NULL, `キー2` int(11) NOT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`キー1`, `キー2`) ); |
composite_primary_keysを入れるとモデル内で下記の構文を使うことができるようになります。
1 2 3 |
class モデル名 < ApplicationRecord self.primary_keys = :キー1, :キー2 end |
プログラム内では下記のように指定したら複合キーの値が取得できます。(「キー1,キー2」の形で複合キーが格納されています。)
1 |
params[:id] |
複合キーを使ってカラムの中の値を検索できます。
1 |
モデル名.find(params[:id]) |
この記事へのコメントはありません。