読者です 読者をやめる 読者になる 読者になる

【Rails】マイグレーションの基本的な使い方メモ

Rails Ruby

はじめに

マイグレーションは別のフレームワークでもほとんど使ったことがなかった。
が、とりあえずrailsでの開発では慣れるためにというのも含めて積極的に使ってみようと思う。
で、基本的な流れをメモしておく

新規でテーブル作成

ひな形を作る(ここではまだテーブルは作成されない)

$ rails g model Test
Running via Spring preloader in process 9841
invoke  active_record
create    db/migrate/20160907013426_create_tests.rb
create    app/models/test.rb
・・・

以下の2ファイルが作成される
db/migrate/xxxx_create_tests.rb
app/models/test.rb

カラムを設定する
※ここではnameカラムを追加

db/migrate/xxxx_create_tests.rb

class CreateTests < ActiveRecord::Migration[5.0]
  def change
    create_table :tests do |t|
      t.string :name # ★コレを追加

      t.timestamps
    end
  end
end

マイグレーションを実行してテーブル作成

$ rake db:migrate
カラム追加

releasedというdatetime型のカラムを追加する 

ひな形作成

$ rails g migration AddColumnReleasedTest
Running via Spring preloader in process 13491
invoke  active_record
create    db/migrate/20160907032425_add_column_released_tests.rb

カラムを設定する
db/migrate/xxxx_add_column_released_tests.rb

class AddColumnTests < ActiveRecord::Migration[5.0]
  def change
    add_column :tests, :released, :datetime, :after => :name # ★コレを追加
  end
end

マイグレーションを実行してカラムを追加

$ rake db:migrate
位置を指定してカラムを追加する
class AddColumnToBook < ActiveRecord::Migration[5.0]
  def change
    add_column :books, :title, :string, :after => :id #★ :after => :idを追加
  end
end
マイグレーションのステータス確認
$ rake db:migrate:status
同じクラス名だとエラーになる

ひな形作成でエラーになる

$ rails g migration AddColumnReleasedTests
Running via Spring preloader in process 14149
invoke  active_record
conflict    db/migrate/20160907033819_add_column_released_tests.rb
Another migration is already named add_column_tests: /path/to/rails/20160907032425_add_column_released_tests.rb. Use --force to replace this migration or --skip to ignore conflicted file.

クラス名の命名規則で回避するもの?なのかよくわかっていないが過去に同じマイグレーションのクラス名のものがあるとエラーになるので重複しないように

おわりに

カラム名や型の変更、カラムの削除もマイグレーションファイルで指定する中身こそは違うけど基本的な流れは同じなので
そのときにパラメータ名とかを調べながらやればいけそう

以上です