##references型とは
references型は新しく作成するテーブルのカラムに、作成済みのテーブルを指定する場合に使う。
既存のテーブルを参照するので、reference(参照という意味)。
##references使用法
referencesはrails g model
で、モデルとマイグレーションファイルを生成する時のカラムの型を指定するときに使う。モデル名(小文字):references
の形で指定。
コマンド例: (userテーブルと紐付けたい、postテーブルを作成)
rails g model post name:string body:string user:references
上記のコマンドを実行すると、
① reference型を指定したカラム名は テーブル名_id となる。
(user:reference であれば、 user_id というカラムが生成される)
② referencesを指定したことで、生成されたモデルファイルにbelongs_to :user
が追加される。
class Post < ApplicationRecord
belongs_to :user
end
belongs_toとは
belongs_toとは他のテーブルとの関係性を示すもので、自分のテーブルが指定したテーブルの下に紐づいている(属している)ことを示す。
モデルの中で belongs_to :モデル名(単数形)
として指定される。
親となるテーブルには、下に複数のテーブルが紐づくことを示すために、has_many :モデル名(複数形)
を記述。
referencesを使えば、belongs_toは自動で記述されるが、has_manyはつかないので、自分で記述する必要がある。
③ マイグレーションファイルにも特別な記述が入る。
#この一文が追加される。
t.references :テーブル名, null: false, foreign_key: true
t.references
カラムが他のテーブルを参照していることを示す。
null: false
NULL値、つまり空欄を許可しないという指定。
foreign_key: true
外部キーであることを示している。
マイグレーション例:
class CreatePosts < ActiveRecord::Migration[6.1]
def change
create_table :posts do |t|
t.references :user, null: false, foreign_key: true
t.string :name
t.string :body
t.timestamps
end
end
end
foreign_key(外部キー)とは
外部キーとは指定したカラムの自由な記述を許可せず、指定したカラムの値のみしか使えないようにする制限のこと。
指定するには、マイグレーションファイルで、対象のカラムのオプションとして、foreign_key: true を追記。
rails db:migrate
をいつも最後に実行するのを忘れてしまうので、忘れないこと。
##参考記事
【Rails】references型とは何か?わかりやすく解説。外部キー(foreign_key)とは?belongs_toやhas_manyの意味と実例