箱のプログラミング日記。

渋谷の自社開発企業でRails書いてます。

マイグレーションファイルの作成・実行

新しくテーブルを作りたい

railsでのアプリケーション開発に当たって、新しくテーブルを作成したい時は、以下の手順で行う。

①モデルの作成(≒テーブルの作成)

②生成されたマイグレーションファイルの編集

マイグレーションの実行

 

 

①ターミナルから以下のコマンドを実行する。

$ rails g model テーブル名(小文字)

 

※カレントディレクトリ(ターミナル上で今どこのディレクトリにいるか)を必ず確認する。

作成中のアプリケーション上でターミナルを実行しているかどうか注意。

 

 

model の生成を行うと、それに対応したテーブルも一緒に作成することができる。

(ただ、これだけではまだテーブルは作成されていない)

 

 

この時、DBフォルダの中にマイグレーションファイルが生成される。

class CreateProducts < ActiveRecord::Migration[5.2]
 def change
 create_table :products do |t|
 
  t.timestamps
  end
 end
end

 

 

 

マイグレーションファイルの編集(カラム名と型を定義)
class CreateProducts < ActiveRecord::Migration[5.2]
 def change
 create_table :products do |t|
  t.string :title
  t.text :image
  t.timestamps
  end
 end
end

 

追加したいカラム分いくつか定義できる。

※t.timestampsはデフォルトで入っている

 

 

マイグレーションの実行(ターミナルで以下のコマンドを実行)

 $ rake db:migrate

 

 

 

 

後からカラムを追加したい場合

これも上と同様に、

①’マイグレーションファイルを作成→②編集→③マイグレーション実行

の流れで行うことができる。

 

すでに実行済みのマイグレーションファイルを編集・上書きすることはできないので、

テーブルの編集をしたい場合は新しく②マイグレーションファイルを作成→②実行の流れを必ず守ること。

 

①’マイグレーションファイルを作成

$ rails g migration AddカラムToテーブル名

カラム名、テーブル名ともに先頭は大文字

※テーブルは単数形

 

ここでいうカラムは必ずしも作成するカラム名と一致している必要はない。

あくまでも、「カラムを追加するためにマイグレーションファイルを作りたいです」

という宣言のようなもので、実際のカラムの追加は、マイグレーションファイルの編集によって行うため。

 

 

②新しくできたマイグレーションファイルの中身を編集(カラムの追加)
class AddDirectorToProducts < ActiveRecord::Migration[5.2]
 def change
 add_column :products, :name, :string
  add_column :products, :text, :text
 end
end

今回のように、すでに作成済みのテーブルにカラムを追加する場合は以下の定義をする

 

add_column :テーブル名,  :カラム名,  :型

 

※一番最初のマイグレーションファイルを作成した時のように、t.timestampsはデフォルトで入っていない。

t.timestampsは自動的に「created_at」「updated_at」と変換され、

カラムとしてすでに追加されているため。

 

マイグレーションの実行

$ rake db:migrate

 

 

まとめ

  • テーブルの編集(新しいテーブルの作成、カラムの追加や削除など)をする時は、その都度マイグレーションファイルを作成する
  • マイグレーションファイルを作成するためには、ターミナル上で「rails g migration AddカラムToテーブル名」や「rails g model テーブル名(小文字)」などのコマンドを実行する
  • マイグレーションファイルを編集し、保存したあとは、必ずターミナルで「rake db:migrate」のコマンドを実行する

 

補足

カラムの追加や削除はテーブルから行うこともできるが、

アプリケーションごとに表示が異なるので、共同開発の際などは向かない。

必ずマイグレーションファイルを作成し、履歴を残すようにすること