web-dev-qa-db-fra.com

Comment supprimer des colonnes à l'aide de la migration Rails

Quelle est la syntaxe pour supprimer une colonne de table de base de données via une migration Rails?

543
Ethan
remove_column :table_name, :column_name

Par exemple:

remove_column :users, :hobby

supprimerait la colonne passe-temps de la table des utilisateurs.

807
Nick Hammond

Pour les anciennes versions de Rails 

Ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Pour Rails 3 et plus

Rails generate migration RemoveFieldNameFromTableName field_name:datatype
349
prabu

Rails 4 a été mis à jour. La méthode de changement peut donc être utilisée dans la migration pour supprimer une colonne. La migration sera restaurée avec succès. Veuillez lire l’avertissement suivant pour les applications Rails 3:

Rails 3 Avertissement

Veuillez noter que lorsque vous utilisez cette commande:

Rails generate migration RemoveFieldNameFromTableName field_name:datatype

La migration générée ressemblera à ceci:

  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end

Veillez à 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):

  def change
    remove_column :table_name, :field_name
  end

La méthode de modification de Rails 3 n’est pas intelligente en ce qui concerne remove_column. Par conséquent, vous ne pourrez pas annuler cette migration. 

109
Powers

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 type de données. Dans l'option suivante, vous pouvez donner des options. C'est un peu caché dans la section 'Transformations disponibles' sur la documentation .

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end
33
Lars Schirrmeister

Il y a deux bonnes façons de le faire:

remove_column

Vous pouvez simplement utiliser remove_column, comme suit:

remove_column :users, :first_name

C'est très bien si vous n'avez besoin que de modifier votre schéma.

bloc change_table

Vous pouvez également le faire en utilisant un bloc change_table, comme suit:

change_table :users do |t|
  t.remove :first_name
end

Je préfère ceci car je le trouve plus lisible et vous pouvez faire plusieurs changements à la fois.

Voici la liste complète des méthodes change_table prises en charge:

http://apidock.com/Rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table

21
superluminary

dans Rails 5, vous pouvez utiliser cette commande dans le terminal:

Rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE

par exemple, pour supprimer la colonne access_level (string) des utilisateurs de la table:

Rails generate migration remove_access_level_from_users access_level:string

puis lancez:

rake db:migrate
13
aschmid

Supprimer les colonnes pour l'application Rails 5

Rails g migration Remove<Anything>From<TableName> [columnName:type]

La commande ci-dessus génère un fichier de migration dans le répertoire db/migrate. Snippet blow est l’un des exemples remove column of table générés par le générateur Rails,

class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end

J'ai également fait un guide de référence rapide pour Rails qui peut être trouvé à ici

10
Xinyang Li
Rails g migration RemoveXColumnFromY column_name:data_type

X = nom de la colonne 
Y = nom de la table

MODIFIER

Changé RemoveXColumnToY en RemoveXColumnFromY selon les commentaires - fournit plus de clarté sur ce que fait réellement la migration.

10
eden

Vous pouvez essayer ce qui suit:

remove_column :table_name, :column_name

( Documentation officielle )

8
Jordan Running

Pour supprimer la colonne de la table, vous devez exécuter la migration suivante:

Rails g migration remove_column_name_from_table_name column_name:data_type

Puis lancez la commande:

rake db:migrate
7
Koresol

Générez une migration pour supprimer une colonne telle que, si elle est migrée (rake db:migrate), elle devrait supprimer la colonne. Et il devrait être rajouter colonne si cette migration est annulée (rake db:rollback).

La syntaxe:

remove_column: nom_table,: nom_colonne,: type

Supprime la colonne, ainsi que ajoute la colonne si la migration est annulée.

Exemple: 

remove_column :users, :last_name, :string

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.

6
Imran

Donnez ci-dessous la commande qu'il ajoutera dans le fichier de migration lui-même

Rails g migration RemoveColumnFromModel

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.

Puis migrez la base de données

rake db:migrate
5
prash

Pour supprimer une colonne de la table en 3 étapes simples, comme suit:

  1. écrire cette commande 

Rails g migration remove_column_from_table_name

après avoir exécuté cette commande dans le terminal un fichier créé avec ce nom et cet horodatage (remove_column de nom_table).

Ensuite, allez dans ce fichier.

  1. à l'intérieur du fichier, vous devez écrire

    remove_column :table_name, :column_name

  2. Enfin, allez à la console puis faites

    rake db:migrate

5
Karan Bamniya

remove_column dans la méthode change vous aidera à supprimer la colonne de la table.

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

Cliquez sur ce lien pour une référence complète: http://guides.rubyonrails.org/active_record_migrations.html

4
Dharmesh Rupani

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 également préférable de prendre en compte le temps d'arrêt, car ActiveRecord met en cache les colonnes de la base de données au moment de l'exécution. Par conséquent, si vous supprimez une colonne, des exceptions peuvent se produire jusqu'au redémarrage de votre application.

Ref: Forte migration

1
Nuttapon

À travers
remove_column :table_name, :column_name
dans un fichier de migration

Vous pouvez supprimer une colonne directement dans une console Rails en tapant:
ActiveRecord::Base.remove_column :table_name, :column_name

0
Manh Cuong

Voici encore un de la console Rails

ActiveRecord::Migration.remove_column(:table_name, :column_name)

0
TD-Rails

Instructions pas à pas simples pour Rails 5.2

AVERTISSEMENT: vous perdrez des données si vous supprimez une colonne de votre base de données. Pour continuer, voir ci-dessous:


1. Créer une migration

  • Exécutez la commande suivante dans votre terminal: 

Rails generate migration remove_fieldname_from_tablename fieldname:string

  • Remarque: le nom de la table doit être au pluriel, conformément à la convention Rails.

Exemple:

  • Dans mon cas, je veux supprimer la colonne accepted (une valeur booléenne) de la table quotes

Rails g migration RemoveAcceptedFromQuotes accepted:boolean

Il existe un raccourci syntaxique spécial pour générer des migrations qui ajoutent champs à une table.

Les Rails génèrent la migration add_fieldname_to_tablename: fieldname: string

2. Vérifiez la migration

# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
  # with Rails 5.2 you don't need to add a separate "up" and "down" method.
  def change
    remove_column :quotes, :accepted, :boolean
  end
end

3. Lancer la migration

rake db:migrate

Et puis vous voilà parti pour les courses!

0
BKSpurgeon

Simplement, vous pouvez supprimer la colonne

remove_column :table_name, :column_name

Par exemple,

remove_column :posts, :comment
0
Foram Thakral