プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】「主キー」、「複合キー」、「composite_primar…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】「主キー」、「複合キー」、「composite_primary_keys」について

11.17

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

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])

スポンサーリンク
  • 2020 11.17
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 12.05

    【Ruby on Rails】「検索機能」の実装(Ransack)

  2. 2019 12.30

    【Ruby on Rails】「Model Spec(モデルスペック)」の基本

  3. 2019 12.08

    【Ruby on Rails】バージョンアップ対策

  4. 2019 12.03

    【Ruby on Rails】アセットパイプラインについて

  5. 2020 07.18

    【Ruby on Rails】「Action Text」について

  6. 2018 06.20

    【Ruby on Rails】レイアウトの共通デザインを定義する。

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Ruby on Rails】「cocoon」について

【Ruby on Rails】「Enum」について

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー