マイグレーションファイルの扱い方
カラムを追加したり、テーブル消したりと色々やってくれるマイグレーションファイル。便利な反面、意外と扱いが厄介でエラーの原因になる事も多々あります。
そんなツンデレなマイグレーションファイルの使い方をメモしていきます!
マイグレーションファイルとは
データベースを生成する時の設計図
例 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あたりについて書いていこうか😁