53 votes

La suppression d'une colonne avec une migration Rails supprimera-t-elle les index associés à la colonne

Dans Rails 2, la suppression d'une colonne avec une migration Rails modifiera-t-elle/supprimera-t-elle également les index associés à la colonne ? Sinon, et à la place, vous devez également modifier/supprimer chaque index manuellement, ne devrait-il pas plutôt être automatisé ?

Merci (d'un débutant Rails)

74voto

enter08 Points 873

A partir de Rails 4, l'index se supprime automatiquement avec la suppression de la colonne.

26voto

John Topley Points 58789

Non, malheureusement, vous devez supprimer l'index manuellement depuis votre migration à l'aide de la méthode remove_index .

6voto

Maragues Points 9461

Pour clarifier, à l'intérieur d'une migration, la syntaxe pour supprimer un index à 2 colonnes est la suivante

 remove_index :actions, :column => [:user_id,:action_name]

ou par nom, une pire option de mon point de vue

 remove_index :actions, :name => "index_actions_on_user_id_and_action_name"

5voto

Jim Points 255

Tout comme une mise en garde, alors que Rails 4 supprimera l'index pour vous si vous supprimez la colonne, vous devez spécifier le type de colonne. Sans type de colonne, l'exécution de rake db:rollback renverra

 rake aborted!
StandardError: An error has occurred, all later migrations canceled:

remove_column is only reversible if given a type.

J'expérimentais la suppression des colonnes de clés étrangères indexées. Même la spécification de index: true dans le bloc de modification ne semblait pas rendre les colonnes réversibles lors de l'annulation.

1voto

William Hu Points 16

Si vous souhaitez supprimer l'index, vous devez utiliser remove_index , si vous utilisez remove_column il supprime l'index mais vous ne pouvez pas exécuter rake db:rollback. Comme Jim l'a mentionné.

 remove_column is only reversible if given a type.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X