Réponses:
remove_column :table_name, :column_name
Par exemple:
remove_column :users, :hobby
supprimerait la colonne hobby de la table des utilisateurs.
remove_column :table_name, :column_name, :type, :options
dans la change
méthode, car si vous spécifiez le type, la migration est possible. De la documentation: Les paramètres type
et options
seront ignorés s'ils sont présents. Il peut être utile de les fournir dans une change
méthode de migration afin de pouvoir les annuler. Dans ce cas, type
et options
sera utilisé par add_column.
change
méthode, mais uniquement si vous spécifiez le type de colonne. Par exemple remove_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
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Pour Rails 3 et plus
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
fonctionne également
AddXXXtoTTT
an RemoveXXXFromTTT
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 ce remove_column
n'est pas pris en charge par la change
méthode, vous devez donc écrire à la fois up
et down
.
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:
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
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):
def change
remove_column :table_name, :field_name
end
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.
change
méthode, la rake db:rollback
commande affichera une erreur. rake db:rollback
est fondamentalement l'opposé de rake 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 .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Il existe deux bonnes façons de procéder:
Vous pouvez simplement utiliser remove_column, comme ceci:
remove_column :users, :first_name
C'est très bien si vous avez seulement besoin d'apporter une seule modification à votre schéma.
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 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
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 (chaîne) des utilisateurs de table:
rails generate migration remove_access_level_from_users access_level:string
puis exécutez:
rake db:migrate
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
Supprime la colonne, ajoute également la colonne en arrière 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.
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) du quotes
tableau:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Voir la documentation concernant une convention lors de l'ajout / suppression de champs à une table:
Il existe un raccourci syntaxique spécial pour générer des migrations qui ajoutent des champs à une table.
les rails génèrent la migration add_fieldname_to_tablename fieldname: fieldtype
# 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
rake db:migrate
.... Et puis c'est parti pour les courses!
rails db:migrate
Supprimer les colonnes de 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 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,
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 .
Vous pouvez essayer ce qui suit:
remove_column :table_name, :column_name
rails g migration RemoveXColumnFromY column_name:data_type
X = nom de colonne
Y = nom de table
ÉDITER
Modifié RemoveXColumnToY
en RemoveXColumnFromY
fonction des commentaires - fournit plus de clarté sur ce que fait réellement la migration.
Donnez la commande ci-dessous, elle ajoutera son propre fichier de migration
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
Migrez ensuite la base de données
rake db:migrate
remove_column
La change
méthode in vous aidera à supprimer la colonne du tableau.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Allez sur ce lien pour une référence complète: http://guides.rubyonrails.org/active_record_migrations.html
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
Voici une autre console de rails
ActiveRecord::Migration.remove_column(:table_name, :column_name)
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
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
Simplement, vous pouvez supprimer la colonne
remove_column :table_name, :column_name
Par exemple,
remove_column :posts, :comment
up
et sur lesdown
méthodes, nonchange
, comme expliqué dans la réponse de @Powers.