Quelle est la syntaxe pour supprimer une colonne de table de base de données via une migration Rails?
625
Quelle est la syntaxe pour supprimer une colonne de table de base de données via une migration Rails?
remove_column :table_name, :column_name
Par exemple:
remove_column :users, :hobby
supprimerait la colonne hobby de la table des utilisateurs.
up
et sur lesdown
méthodes, nonchange
, comme expliqué dans la réponse de @Powers.remove_column :table_name, :column_name, :type, :options
dans lachange
méthode, car si vous spécifiez le type, la migration est possible. De la documentation: Les paramètrestype
etoptions
seront ignorés s'ils sont présents. Il peut être utile de les fournir dans unechange
méthode de migration afin de pouvoir les annuler. Dans ce cas,type
etoptions
sera utilisé par add_column.change
méthode, mais uniquement si vous spécifiez le type de colonne. Par exempleremove_column, :table_name, :column_name, :column_type
. Sinon, vous obtiendrez l'erreur suivante lorsque vous tenterez d'exécuter la migration:remove_column is only reversible if given a type
Pour les anciennes versions de Rails
Pour Rails 3 et plus
la source
rails g migration remove_field_name_from_table_name field_name:datatype
fonctionne égalementAddXXXtoTTT
anRemoveXXXFromTTT
peut être suivi d'une liste d'espacement blanc de nom_dossier: type_données, et les instructions add_column et remove_column appropriées seront créées:rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
supprime deux attributs à l'aide d'une seule migration. Notez également que ceremove_column
n'est pas pris en charge par lachange
méthode, vous devez donc écrire à la foisup
etdown
.change
cela. La restauration fonctionne comme il se doit.change
méthode qui peut être annulée *, vous devrez informer le type de données (et tous les autres modificateurs de champ), donc si vous annulez cette migration, le champ peut être correctement recréé. * Quand je dis rétabli, c'est en termes de structure de base de données, bien sûr, les données de cette colonne seront évidemment perdues.Rails 4 a été mis à jour, donc la méthode de modification peut être utilisée dans la migration pour supprimer une colonne et la migration réussira. Veuillez lire l'avertissement suivant pour les applications Rails 3:
Avertissement Rails 3
Veuillez noter que lorsque vous utilisez cette commande:
La migration générée ressemblera à ceci:
Assurez-vous de ne pas utiliser la méthode de modification lors de la suppression de colonnes d'une table de base de données (exemple de ce que vous ne voulez pas dans le fichier de migration dans les applications Rails 3):
La méthode de changement dans Rails 3 n'est pas intelligente en ce qui concerne remove_column, vous ne pourrez donc pas annuler cette migration.
la source
change
méthode, larake db:rollback
commande affichera une erreur.rake db:rollback
est fondamentalement l'opposé derake db:migrate
. Ce bug a été corrigé dans Rails 4 :)Dans une application rails4, il est également possible d'utiliser la méthode de modification pour supprimer des colonnes. Le troisième paramètre est le data_type et dans le quatrième optionnel, vous pouvez donner des options. C'est un peu caché dans la section 'Transformations disponibles' de la documentation .
la source
Il existe deux bonnes façons de procéder:
remove_column
Vous pouvez simplement utiliser remove_column, comme ceci:
C'est très bien si vous avez seulement besoin d'apporter une seule modification à votre schéma.
bloc change_table
Vous pouvez également le faire en utilisant un bloc change_table, comme ceci:
Je préfère cela car je le trouve plus lisible, et vous pouvez apporter plusieurs modifications à la fois.
Voici la liste complète des méthodes change_table prises en charge:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
la source
dans rails 5, vous pouvez utiliser cette commande dans le terminal:
par exemple pour supprimer la colonne access_level (chaîne) des utilisateurs de table:
puis exécutez:
la source
Générez une migration pour supprimer une colonne de sorte que si elle est migrée (
rake db:migrate
), elle doit supprimer la colonne . Et il devrait ajouter une colonne en arrière si cette migration est annulée (rake db:rollback
).La syntaxe:
remove_column: nom_table,: nom_colonne,: type
Exemple:
Remarque : Si vous ignorez le type de données , la migration supprimera la colonne avec succès mais si vous annulez la migration, une erreur se produira.
la source
Instructions claires et simples pour Rails 5.2
1. Créez une migration
Exécutez la commande suivante dans votre terminal:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Remarque: le nom de la table doit être au pluriel selon la convention des rails.
Exemple:
Dans mon cas, je veux supprimer la
accepted
colonne (une valeur booléenne) duquotes
tableau:rails g migration RemoveAcceptedFromQuotes accepted:boolean
Voir la documentation concernant une convention lors de l'ajout / suppression de champs à une table:
2. Vérifiez la migration
3. Exécutez la migration
rake db:migrate
.... Et puis c'est parti pour les courses!
la source
rails db:migrate
Supprimer les colonnes de l'application RAILS 5
La commande ci-dessus génère un fichier de migration dans le
db/migrate
répertoire. L'extrait de coup est l'un des exemples de suppression de colonne de la table généré par le générateur Rails,J'ai également fait un guide de référence rapide pour Rails qui peut être trouvé ici .
la source
Vous pouvez essayer ce qui suit:
( Documentation officielle )
la source
X = nom de colonne
Y = nom de table
ÉDITER
Modifié
RemoveXColumnToY
enRemoveXColumnFromY
fonction des commentaires - fournit plus de clarté sur ce que fait réellement la migration.la source
Pour supprimer la colonne du tableau, vous devez exécuter la migration suivante:
Exécutez ensuite la commande:
la source
Donnez la commande ci-dessous, elle ajoutera son propre fichier de migration
Après avoir exécuté la commande ci-dessus, vous pouvez vérifier que le fichier de migration remove_column doit y être ajouté seul
Migrez ensuite la base de données
la source
remove_column
Lachange
méthode in vous aidera à supprimer la colonne du tableau.Allez sur ce lien pour une référence complète: http://guides.rubyonrails.org/active_record_migrations.html
la source
Pour supprimer la colonne du tableau en 3 étapes simples:
rails g migration remove_column_from_table_name
après avoir exécuté cette commande dans le terminal, un fichier créé par ce nom et l'horodatage (remove_column from_table_name).
Allez ensuite dans ce fichier.
à l'intérieur du fichier, vous devez écrire
remove_column :table_name, :column_name
Allez enfin à la console puis faites
rake db:migrate
la source
Voici une autre console de rails
ActiveRecord::Migration.remove_column(:table_name, :column_name)
la source
Dans
remove_column :table_name, :column_name
un fichier de migration
Vous pouvez supprimer une colonne directement dans une console de rails en tapant:
ActiveRecord::Base.remove_column :table_name, :column_name
la source
Fait comme ça;
rails g migration RemoveColumnNameFromTables column_name:type
C'est à dire
rails g migration RemoveTitleFromPosts title:string
Quoi qu'il en soit, il serait préférable de prendre également en compte les temps d'arrêt, car ActiveRecord met en cache les colonnes de la base de données au moment de l'exécution, donc si vous supprimez une colonne, cela peut provoquer des exceptions jusqu'à ce que votre application redémarre.
Réf: Forte migration
la source
Simplement, vous pouvez supprimer la colonne
Par exemple,
la source
essayez d'abord de créer un fichier de migration en exécutant la commande:
puis sur le répertoire racine du projet, exécutez la migration en exécutant la commande:
la source