Rails 2 では、Rails 移行で列を削除すると、列に関連付けられているインデックスも変更/削除されますか? そうでない場合、代わりに各インデックスを手動で変更/削除する必要がある場合は、代わりに自動化すべきではありませんか?
ありがとう(Rails初心者から)
Rails 2 では、Rails 移行で列を削除すると、列に関連付けられているインデックスも変更/削除されますか? そうでない場合、代わりに各インデックスを手動で変更/削除する必要がある場合は、代わりに自動化すべきではありませんか?
ありがとう(Rails初心者から)
remove_index
いいえ、残念ながら、このメソッドを使用して、移行内から手動でインデックスを削除する必要があります。
明確にするために、移行内で2列のインデックスを削除する構文は次のとおりです。
remove_index :actions, :column => [:user_id,:action_name]
または名前で、私の観点からはより悪いオプション
remove_index :actions, :name => "index_actions_on_user_id_and_action_name"
Rails 4 では、列を削除するとインデックスが削除されますが、列の種類を指定する必要があります。列の型がない場合、runningrake db:rollback
は戻ります
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
remove_column is only reversible if given a type.
インデックスが作成された外部キー列を削除して実験していました。変更ブロックで指定index: true
しても、ロールバック時に列が元に戻せないように見えました。
インデックスを削除したい場合は を使用する必要がありremove_index
ます。使用するremove_column
とインデックスは削除されますが、rake db:rollback を実行することはできません。ジムが言ったように。
remove_column is only reversible if given a type.
Rails > 3.2.16 では、列を削除するとインデックスが削除されます。