migrationファイルの作成とやり直し方(初学者向け)
migrationファイルとは、一言で言うと、
DBの設計図です。
マイグレーションファイルに必要なカラムを書き込み、実行することでDBにテーブルを作成できます。アプリケーションとデーターベースの間には構造的なギャップがありまして、インピーダンスミスマッチと言うそうですが、Rails ではO/RマッパーであるActiveRecordが提供されていて、SQLで書かずとも、データを取得できることになってます。
modelを作成するとmigrationファイルも作成されます
modelと併せて作成できます
$ rails g model モデル名
カラムを追加したい時migrationファイルも作成されます
$ rails g migration AddXxxxxToテーブル名
作成したいカラムを記述します
changeメソッドで作成するカラムを指定します。
この例はnameとbookとimageカラムを作成します。
書き込んだ後、保存してください。
class CreateTweets < ActiveRecord::Migration[5.2]
def change
create_table :books do |t|
t.string :name
t.text :book
t.text :image
t.timestamps null:true
end
end
end
主な利用できるデータ型
型 | 説明 | 用途 |
---|---|---|
integer | 数字 | ユーザid |
string | テキスト | パスワード,ユーザー名 |
text | 文字 | テキスト |
boolean | 真か偽か | 真偽フラグ |
datatime | 日付と時刻 | 作成日時 |
float | 浮動小数点数 |
実行コマンド
現時点で未実行のmigrationファイルを実行します。
rake db:migrate
schema_migrationsファイルにバージョンが記録される
ActiveRecord::Schema.define(version: 2019_05_20_151430) do
create_table "books", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
t.string "name"
t.text "text"
t.text "image"
t.datetime "created_at"
t.datetime "updated_at"
end
end
schema_migrationsファイルはmigrationファイルの実行履歴のようなもので、複数のmigrationファイルにおいても、記録されているテーブルです。最新のスキーマ情報をrubyスクリプトとして表現しています。
テーブルを確認する(phpMyadmin(Mysql))
versionが一致しているmigrationファイルであることがわかります。

rake db:version
意図しないカラムができた場合や、何かしらの更新の変更の時など。
$ rake db:rollback
migrateされていないファイルを確認する
rake db:abort_if_pending_migrations
ロールバックしたことによりdbからは削除されていますが、ファイルとしてはdb/migrate
に残っています。ぱっと見では確認出来ませんがこのコマンドにより、migrateされていないファイルを特定出来ます。
rake db:rollback
は最新の更新履歴の一つ前の状態に戻すコマンドです。意図しないカラムなどを削除して書き換えて、今一度、rake db:migrate
で実行しても、更新はされません。新たなカラムを追加したい場合は、常にmigrationファイルを作成してください。
ActiveRecord::Base.connection.tables
DBが元に戻ったかターミナルで確認
# コンソールで確認
$ rails c
# booksがない場合は、成功してます
$ ActiveRecord::Base.connection.tables
=> ["schema_migrations",]
$ exit
これまでmigrateした履歴を表示
$ rake db:migrate:status
結果
database: book_development
Status Migration ID Migration Name
--------------------------------------------------
up 20190520151430 Create books
up で表示されるのはDBに反映されているファイルのこと。
down で表示されるのは、反映されていないファイルのこと。
migrationファイルを複数から選んでrollbackしたい時
特定のファイルを指定できます。
rails db:migrate:down Version=migrationID
まとめ
migrationファイルで出来ること(初学者向け)
migrationファイルはDB設計図であります。
今回はchangeメソッドとdbを使うときの扱い方法でした。