プログラミングマガジン

プログラミングを中心に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 07.18

    【Ruby on Rails】環境変数に関する知識、direnv

  2. 2019 12.24

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

  3. 2020 12.26

    【Ruby on Rails】「チェックボックス」、「チェックボックスのバリデーション」

  4. 2019 12.02

    【Ruby on Rails】RailsでのAjaxリクエスト(rails-ujs、SJRなど)

  5. 2019 12.01

    【Rspec】FactoryBotでデータを準備する。

  6. 2020 12.26

    【Ruby on Rails】「ActionView::Helpers」や「FormBuilder」について

  • コメント ( 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 ©  プログラミングマガジン | プライバシーポリシー