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


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


506
2018-05-14 00:02


origine


Réponses:


remove_column :table_name, :column_name

Par exemple:

remove_column :users, :hobby

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


750
2018-06-03 05:49



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

336
2017-09-18 18:22



Rails 4 a été mis à jour. Par conséquent, la méthode de modification peut être utilisée dans la migration pour supprimer une colonne et la migration sera annulé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 change lorsque vous supprimez des 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. Vous ne pourrez donc pas annuler cette migration.


103
2017-07-22 16:12



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_données et dans la quatrième option, 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

30
2017-07-09 21:30



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

remove_column

Vous pouvez simplement utiliser remove_column, comme ceci:

remove_column :users, :first_name

C'est bien si vous avez seulement besoin de faire une seule modification à votre schéma.

bloc change_table

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

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

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

Voici la liste complète des méthodes change_table supportées:

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


20
2018-04-09 12:25



dans les 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 (chaîne) des utilisateurs de table:

rails generate migration remove_access_level_from_users access_level:string

puis exécutez:

rake db:migrate

10
2017-08-24 09:11



rails g migration RemoveXColumnFromY column_name:data_type

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

MODIFIER

Modifié RemoveXColumnToY à RemoveXColumnFromY selon les commentaires - fournit plus de clarté sur ce que la migration est en train de faire.


10
2018-04-06 08:24