■環境
・rails
・sqlite3
・あらかじめ外部キーを設定したいテーブルは作成済み
①テーブルを作成(カラムに何も入れずテーブルだけ作成)
$ rails generate model Card_in_deck
②$rails db:migrate
でテーブルを作成
ーーーーーーーーーーーFKの設定ーーーーーーーーーーー
③作成したテーブルにカラムを追加する
$ rails generate migrate AddPokemonNoItemsToCardInDeck
④db/migrate/~~~~.rb
ファイルに異kのように外部キーの設定をする
class AddPokemonNoItemsToCardInDeck < ActiveRecord::Migration[7.0] def change add_reference :card_in_decks, :pokemon_no_items, foreign_key: true end end
※もし上記を書く際間違えた場合は、書き直してdb/schema.rb
を削除、rails db:reset
実行、rails db:migrate
を実行
※add_reference
の部分はadd_column
になっていると思うので変更し、2つ目のカラム名もテーブル名に変更する。
※type: integer
はデフォルトでいいので書かなくて良い。
※また、IDがNULLになって欲しくない場合は、null: false
をforeign_key: true,
の後に追加。
→テーブルのschemaにnut nullを追加する設定。
⑤$ rails db:migrate
⑥sqlite> .schema card_in_decks
でカラムが作成されたか確認。
sqlite> .schema card_in_decks CREATE TABLE IF NOT EXISTS "card_in_decks" ( "id" integer NOT NULL PRIMARY KEY, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL, "pokemon_no_items_id" integer DEFAULT NULL, CONSTRAINT "fk_rails_e40888835a"FOREIGN KEY ("pokemon_no_items_id") REFERENCES "pokemon_no_items" ("id") Us CREATE INDEX "index_card_in_decks_on_pokemon_no_items_id" ON "card_in_decks" ("pokemon_no_items_id");
※↑見やすいように改行した!
外部キーが作成されているのでOK