【Rails】カラムのデータ型を変える
動機
何も考えずにテーブルを設計してしまい、カラムのデータ型を変更したい。
やること
Userテーブルのageカラムのデータ型をstringからintegerにしたい。
1 migrationファイルを用意します
rails g migration xxxxxxx <- 適切なクラス名
2 migrationファイルにupメソッドとdownメソッドを定義します
upメソッドに変更後の内容、downメソッドに変更前の内容を書きます。
rails db:migrate
でupメソッドの変更が実行されます。
rails db:rollback
でdownメソッドの変更が実行されます。
class ChangeAgeOnUsers < ActiveRecord::Migration[5.0] def up change_table :users do |t| t.change :age, :integer end end def down change_table :users do |t| t.change :age, :string end end end
3 rails db:migrateを実行する
migrationファイルのupメソッドの内容が反映されているか、確認します。
sqlite> .schema users CREATE TABLE "users" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "age" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL );
念のため、rails db:rollbackしてみて、ロールバックが期待通りに動作するか、確認します。
sqlite> .schema users CREATE TABLE "users" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "age" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL );
いい感じですね。