プログラミングマガジン

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

    【Ruby on Rails】CSVインポートやエクスポート機能について

  2. 2020 07.18

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

  3. 2020 12.12

    【Ruby on Rails】「プレゼンター(デコレーター)」について

  4. 2019 12.01

    【Ruby on Rails】URLの指定方法について(URLヘルパーメソッド等)

  5. 2019 12.30

    【Rspec】「Controller Spec(コントローラスペック)」の基本

  6. 2020 11.17

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

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