プログラミングマガジン

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

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】「外部キー」の設定のされ方
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】「外部キー」の設定のされ方

12.19

  • miyabisan2
  • コメントを書く

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

外部キーはマイグレーションで設定する場合と、モデル側でRailsの機能として設定する場合の2種類あります。実務ではマイグレーションでは外部キー制約は設定しない傾向にあるように思えます。(データの用意が面倒になりますからね。)

「マイグレーション」で外部キーを設定したい場合

「user:post=1:多」の場合

reference型を使う場合

1
2
3
4
5
6
7
8
9
10
class CreatePosts < ActiveRecord::Migration[6.0]
  def change
    create_table :posts do |t|
      t.string :name
      t.references :user,foreign_key:true
 
      t.timestamps
    end
  end
end

reference型の仕様

  • 「モデル名_id」というカラム名を自動で生成する。
  • インデックスを自動で付与してくれる。
  • 外部キー制約は付与しない。(したい場合は「foreign_key:true」と指定する必要があります。)

reference型を使わない場合

1
2
3
4
5
6
7
8
9
10
11
class CreatePosts < ActiveRecord::Migration[6.0]
  def change
    create_table :posts do |t|
      t.string :name
      t.integer :user_id
 
      t.timestamps
    end
    add_foreign_key :posts, :users # add_foreign_key :対象のテーブル名, :指定先のテーブル
  end
end

add_foreign_keyを使えば、post_idには自動でインデックスが付与されるので「add_index」や「index:true」が不要になります。

「リレーション」での外部キーの決定のされ方(モデル側)

通常

1:多の多の方のテーブルで「参照先のモデル名」 + 「_id」という名前のカラムを付けたら自動的に外部キーと決定される。

異なるカラムを外部キーにしたい場合

1
2
3
class 親モデル名 < ActiveRecord::Base
    アソシエーション :子モデル名, foreign_key: '親モデルが子モデルの中で参照する外部キー名'
end

アソシエーション

has_manyや、has_one、belongs_toの事です。

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

関連記事

  1. 2020 11.22

    【Ruby on Rails】「画面パラメータの渡し方」の種類

  2. 2019 12.07

    【Ruby on Rails】「Active Job」でジョブを非同期実行する。(Sidekiq)

  3. 2020 11.17

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

  4. 2019 11.26

    【Ruby on Rails】バリデーション処理、メッセージの日本語化

  5. 2021 01.09

    【Ruby on Rails】「bullet」、「N+1問題」について

  6. 2019 12.05

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

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

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

返信をキャンセルする。

【Ruby on Rails】「アソシエーション(ha…

【Ruby on Rails】モデルの基本、データ型、…

RETURN TOP

著者プロフィール

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

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

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • 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 ©  プログラミングマガジン | プライバシーポリシー