マイグレーションファイルの扱い方

カラムを追加したり、テーブル消したりと色々やってくれるマイグレーションファイル。便利な反面、意外と扱いが厄介でエラーの原因になる事も多々あります。

そんなツンデレなマイグレーションファイルの使い方をメモしていきます

マイグレーションファイルとは

データベースを生成する時の設計図

例
class CreateMessages < ActiveRecord::Migration[5.2]
  def change
    create_table :messages do |t|
      t.string :text  例えばこれは、messagesテーブルにtextカラムと言うものを、string型で生成してくださいと書いてある
      t.string :image
      t.references :group, foreign_key: true 例えばこれは、messagesテーブルにgroup_idカラムと言うものを、references型で生成してくださいと書いてある. foreign_key: true これは外部キーとして扱いますとしている。
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end

マイグレーションファイルの作成、削除

生成

rails g migration マイグレーション名
もしくは
rails generate model モデル名 カラム名:型 カラム名:型

2つの違いは、簡単に言うとモデルに紐づけて作成するか、しないか。カラムの追加などは上の方

削除

削除する前に

マイグレーションファイルの状態をupからdownに変更する

rake db:migrate:status 
 database: talk-space_development
  Status   Migration ID    Migration Name
 --------------------------------------------------
    up     20190725060358  Create groups
    up     20190725060520  Create group users
    up     20190725061841  Create users
    up     20190725094104  Add devise to users
    up     20190725101231  Add name to user
    up     20190727055217  Add image to user
    up     20190727061702  Add image to message
    up     20190727093534  Remove message
    up     20190727094036  Create messages 

これをdownにします
rake  db:rollback
 down    20190727094036  Create messages こんな感じにdownになれば大丈夫😏 
これでマイグレーションファイルに記述の変更を加えることができます

消したいファイル、カラムを削除
その後に
rake db:migrate これでおっけい👌

マイグレーションファイルを使ったカラム、テーブル削除

カラム追加、削除

処理を実行するマイグレーションファイルを作成して、add_columnとremove_columnを使用

remove_column :users, :image, :string usersテーブルのimageカラムを削除
add_column :messages, :image, :string messagesテーブルにimageカラムを追加

テーブル削除

処理を実行するマイグレーションファイルを作成して、create_tableとdrop_tableを使用

drop_table :messages messagesテーブルを削除
create_table :users usersテーブルを追加

主に使用するコマンド

rake db:create データベース作成

rake db:migrate マイグレーションファイルに基づいてテーブル、カラムを作成

rake db:migrate:status マイグレーションファイルの状態確認。downの時は書き込みオーケー

rake db:rollback マイグレーションファイルの最新のものから順にdownにしていく

rails db:version マイグレーションファイルのバージョンを確認。指定したい時にに使える。

rake db:reset 中身の値を全てからにする。rake db:migrateも兼ねている。

rake db:drop データベースを削除。中身の値もなくなる。

他にもたくさんあるけど自分は大体このぐらいの中でやっている気がする😝

次はrenderあたりについて書いていこうか😁