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 passe-temps de la table des utilisateurs.
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 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.
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
Il y a deux bonnes façons de le faire:
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.
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
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
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 .
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.
Vous pouvez essayer ce qui suit:
remove_column :table_name, :column_name
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
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.
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
Pour supprimer une colonne de la table en 3 étapes simples, comme suit:
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.
à l'intérieur du fichier, vous devez écrire
remove_column :table_name, :column_name
Enfin, allez à la console puis faites
rake db:migrate
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
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
À traversremove_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
Voici encore un de la console Rails
ActiveRecord::Migration.remove_column(:table_name, :column_name)
AVERTISSEMENT: vous perdrez des données si vous supprimez une colonne de votre base de données. Pour continuer, voir ci-dessous:
Rails generate migration remove_fieldname_from_tablename fieldname:string
Exemple:
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
# 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 vous voilà parti pour les courses!
Simplement, vous pouvez supprimer la colonne
remove_column :table_name, :column_name
Par exemple,
remove_column :posts, :comment