【Rails】マイグレーションの基本的な使い方メモ
はじめに
マイグレーションは別のフレームワークでもほとんど使ったことがなかった。
が、とりあえず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.
クラス名の命名規則で回避するもの?なのかよくわかっていないが過去に同じマイグレーションのクラス名のものがあるとエラーになるので重複しないように