LoginSignup
6
7

More than 3 years have passed since last update.

Rails5.2 migrationファイルの作成とやり直し方

Last updated at Posted at 2019-05-21

migrationファイルの作成とやり直し方(初学者向け)

migrationファイルとは、一言で言うと、
DBの設計図です。
マイグレーションファイルに必要なカラムを書き込み、実行することでDBにテーブルを作成できます。アプリケーションとデーターベースの間には構造的なギャップがありまして、インピーダンスミスマッチと言うそうですが、Rails ではO/RマッパーであるActiveRecordが提供されていて、SQLで書かずとも、データを取得できることになってます。

modelを作成するとmigrationファイルも作成されます

modelと併せて作成できます:blush:

$ rails g model モデル名 

カラムを追加したい時migrationファイルも作成されます:blush:

$ rails g migration AddXxxxxToテーブル名

作成したいカラムを記述します

changeメソッドで作成するカラムを指定します。
この例はnameとbookとimageカラムを作成します。
書き込んだ後、保存してください。

db/migrate/201xxxxxx_creat_books.rb
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ファイルにバージョンが記録される

db/migrate/schema.rb
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ファイルであることがわかります。


mysql-pic.png


dbを元に戻したい時

どこまでmigrateされているか確認する

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を使うときの扱い方法でした。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7