カラム追加・削除・編集方法
はじめに
カラム周辺のコマンドをすぐ忘てしまうので、まとめてみました
カラム追加
$ rails g migration Addカラム名Toテーブル名 カラム名:型名
- 具体的な書き方
「books」テーブルに文字列型の「title」というカラムを追加したい場合は、以下のようになります。
$ rails g migration AddTitleToBooks title:string
$ rails db:migrate
「rails db:migrate」: データベースの構造(テーブル、カラム)を変更するときに利用するコマンド
カラム削除
$ rails g migration Removeカラム名Fromテーブル名 カラム名:型名
- 具体的な書き方
「books」テーブルに文字列型の「title」というカラムを削除したい場合は、以下のようになります。
$ rails g migration RemoveTitleFromBooks title:string
$ rails db:migrate
## ※データベース変更前の注意点
カラムを変更する際はデータベースを変更するので、簡単には変更できないようになっている。
ここの手順も間違えがちで、かつ間違えると厄介なところです。
$ rails db:migrate:status
上記のコマンドを実行すると下記の表記が出ます。
下記の表記でこれまでに作られたmigrationファイルがdb:migrateされたかどうかがわかります。
down → db:migrate実行前、up → db:migrate実行後
Status Migration ID Migration Name
--------------------------------------------------
up 20220403064432 Devise create users
down 20220403131323 Add name to users
一番大事なことが、データベースを変更する場合は、migrationファイルがdown状態かどうかを確認してから、変更しなければなりません。
データベースのステータスをupからdownにする方法
- rails db:migrate実行直後の場合
$ rails db:rollback
上記が1つ前の状態に戻すコマンドです。先ほど確認したStatusがdownになるので、そのファイルを削除や変更することができるようになります。
- rails db:migrate実行直後出ない場合
$ rails db:migrate:down VERSION=Migration ID
上記でMigration ID で指定したもののみdownにすることができます!
Migration IDは$rails db:migrate:statusで確認できます。
migrationファイルはデータベースに関するものなので扱いには気をつけなければエラーを起こしやすいので、慎重にするべきです!!
## カラム名の変更(修正)について
migrationファイルを作成
データベースに反映済みのマイグレーションファイル直接修正
$ rails g migration rename_変更したいカラム名_column_to_テーブル名
(例) $ rails g migration rename_title_column_to_books
上記のコマンドで下記のファイルが作成されるので、そのファイルを編集します。
class RenameRequestColumnToJobAdministrations < ActiveRecord::Migration[5.0]
def change
rename_column :posts, :title, :comment
end
end
最後に
$ rails db:migrate
でデータベースに反映させます。
データ型の変更
$ rails g migration ChangeDatatypeカラム名Ofテーブル名
(例) $ rails g migration ChangeDatatypeCommentOfPosts
カラム名、テーブル名は大文字なので気をつけてください!
生成されたファイルを編集します。
class ChangeDatatypeUseIdOfBlogs < ActiveRecord::Migration[5.0]
def change
change_column :posts, :comment, :text
end
end
最後に
& rails db:migrate
でデータベースに反映させます。
参考:
Discussion