LoginSignup
4

More than 5 years have passed since last update.

Railsでマイグレーションファイルを複数追加

Posted at

はじめに

 これは備忘録を兼ねたtipsです。RubyとRailを熟知している方には当たり前でしょうが、私のような使い慣れていない方や忘れてしまった方のために残したものです。

マイグレーションファイルの追加で衝突

 Railsは幾つものマイグレーションファイルを追加していけますが、同じ命名法で同じテーブルに対するマイグレーションファイルを追加しようとすると次の実行例のように名前が衝突した(同じだ)として、強制的に置き換えることを勧められます。さて、どうすれば良いのでしょうか?

matthew@app$ rails g migration AddColumnToRobot memo:string
Running via Spring preloader in process 29931
      invoke  active_record
    conflict    db/migrate/20190108233655_add_column_to_robot.rb
Another migration is already named add_column_to_robot: /home/matthew/app/db/db/migrate/20190108023819_add_column_to_robot.rb. Use --force to replace this migration or --skip to ignore conflicted file.
$

衝突回避策

 マイグレーション機能の実装ソースを見て挙動を予測してからのほうが良いかもしれませんが、直ぐにテストができるなら、試した方が早いということで、マイグレーションファイルを生成するときに命名方法を工夫してみました。二つめのマイグレーションファイルを追加したいということで、末尾に2をつける命名法でマイグレーションファイルを生成させてみました。

matthew@app$ rails g migration AddColumnToRobot2 memo:string
Running via Spring preloader in process 29970
      invoke  active_record
      create    db/migrate/20190108234849_add_column_to_robot2.rb
vagrant@robocon:kosen-robocon-db$

編集

マイグレーション・ファイルは問題なく生成されました。ファイル中のクラス名は何でもよいとして、add_column関数の最初の引数に指名しているテーブル名がrobot2sと生成されてしまいました。実在しているテーブルはrobotsですので、これをエディタでrobotsに変更します。

20190108234849_add_column_to_robot2.rb
class AddColumnToRobot2 < ActiveRecord::Migration[5.2]
  def change
    add_column :robot2s, :memo, :string
  end
end

マイグレーション実行

マイグレーションを実行した後、db/schema.rbとデータベースで指定のテーブルに指定のカラムが増えたのを確認しました。また、ロールバックも実行してみたところ、元に戻ることを確認できました。

matthew@app$ rails db:migrate
== 20190108234849 AddColumnToRobot2: migrating ================================
-- add_column(:robots, :memo, :string)
   -> 0.0153s
== 20190108234849 AddColumnToRobot2: migrated (0.0170s) =======================
vagrant@robocon:kosen-robocon-db$ rails db:rollback
== 20190108234849 AddColumnToRobot2: reverting ================================
-- remove_column(:robots, :memo, :string)
   -> 0.2186s
== 20190108234849 AddColumnToRobot2: reverted (0.2519s) =======================

vagrant@robocon:kosen-robocon-db$

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4