LoginSignup
0
0

More than 5 years have passed since last update.

【未解決】Ruby on Rails:テーブルのカラム構成を変更する時、なぜマイグレーションファイルを新しく作成するか

Posted at

Ruby on Railsはモデルという単位でデータベースを管理するけど、
実際にレコードを追加したり削除したりの操作するためには
1. モデルの作成
2. マイグレーションファイルの定義
3. マイグレーションの実施
のように操作を実施するのですが、
ここでわからなかった事が出てきまして、、。
カラムに変更が生じたときはマイグレーションファイルをいじるのではなく、新しく変更用のマイグレーションファイルを作成してマイグレーションしなければいけないかということです。

同じマイグレーションファイルいじってもう一回そのファイルをつかってマイグレーションしなおせばいいじゃん、と。

でもRailsの仕様で同じバージョンのマイグレーションファイルはデフォルト実行しないみたいです。

自分なりに以下のように解釈しています。参考になるURLなどあれば追記します。
結論として、ActiveRecordでSQL文をデータベース管理システムに送るときに矛盾が発生するためかなと考えています。

そもそもデータベースはRailsではなくMySQLなどのデータベース管理システムが管理しています。
いくら便利なRailsさんでもデータベース管理まではできないようで、MySQLなどのデータベース管理システムにおまかせしています。なのでデータベースに手を加えるときはSQL分で命令しなければいけません。
(たぶんここまでは間違っていないですよね、、)

そして、Railsでデータベースを扱うときは、マイグレーションファイルを作成して、その中で書いた設定情報にしたがって
ActiveRecordという機能を通してSQLの命令文に翻訳しデータベース管理システムにその命令を渡す、
というやりかたでデータベースとやりとりをします。
ここでもとのマイグレーションファイルを修正する形でテーブルのカラムを変更しようとすると
テーブルを作成する、という命令を重ねてデータベース管理システムに渡してしまうことになり
いまあるテーブルと命令しようとしている内容に矛盾が生じてうまくいかなくなるのではないかと。

なので、ちょっぴし不便でも一度作ったテーブルを変更したいときは正規のSQL文で変更用の命令文を渡さなければいけないのではないかと。

以上、推測です。
SQL勉強します。ゴミ記事ごめんなさい。

0
0
0

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
0
0