Rails: db:resetとdb:migrate:resetの違いについて
こんばんは、くになかです。
学習したことの備忘録を書いて行きたいと思います。
はじめに
テストを試してみたところ、以下のエラーが出たので、その解決方法を記載しています。
Rails / UniqueValidationWithoutIndex 一意性の検証には一意のインデックスを使用する必要があります。
解決方法
t.index [:user_id, :board_id], unique: true
以前、カラムに一意成約をつけるためにマイグレーションファイルに上記コードを追加しました。
それを反映させるために、rails db:resetをして再度rails db:migrateをしたのですが、変更されず一意性の検証エラーが出ました。
そのやり方は、適切ではなかったみたいです。
調べてみたところ、rails db:resetではマイグレーションファイルを編集していても、その内容は反映されないため、schema.rbは書き換わらないのです。
スキーマファイルを確認してみたところ、変更は適用されていませんでした。
t.index ["user_id", "board_id"], name: "index_bookmarks_on_user_id_and_board_id"
正しくはdb:migrate:resetでした。
db:migrate:reset はマイグレーションファイルを直接利用します。つまり、マイグレーションファイルの変更が反映されます。
実行し、スキーマファイルを確認してみたところ、変更が適用されていました。
t.index ["user_id", "board_id"], name: "index_bookmarks_on_user_id_and_board_id", unique: true
参考文献
以上です。最後まで読んでいただきありがとうございます。