Quelle est la syntaxe pour supprimer une colonne de table de base de données lors d'une migration Rails ?
Et assurez-vous de faire ça à l'intérieur up
y down
les méthodes, et non change
comme expliqué dans la réponse de @Powers.
Quelle est la syntaxe pour supprimer une colonne de table de base de données lors d'une migration Rails ?
Et assurez-vous de faire ça à l'intérieur up
y down
les méthodes, et non change
comme expliqué dans la réponse de @Powers.
@XåpplI'-I0llwlg'I-Merci pour le commentaire. La méthode de modification peut être utilisée pour déposer une colonne dans les applications Rails 4, mais ne doit pas être utilisée dans Rails 3. J'ai mis à jour ma réponse en conséquence.
Vous pouvez également utiliser remove_column :table_name, :column_name, :type, :options
au sein de la change
car si vous spécifiez le type, il est possible de revenir sur la migration. Extrait de la documentation : Le site type
y options
Les paramètres seront ignorés s'ils sont présents. Il peut être utile de les fournir dans le fichier de migration change
pour qu'elle puisse être annulée. Dans ce cas, type
y options
sera utilisé par add_column.
rails g migration remove_field_name_from_table_name field_name:datatype
fonctionne également
Notez également que AddXXXtoTTT
un RemoveXXXFromTTT
peut être suivie d'une liste de nom de fichier:type de 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 en utilisant une seule migration. Notez également que remove_column
n'est pas pris en charge par change
vous devez donc écrire les deux méthodes up
y down
.
Rails 4 a été mis à jour, de sorte que la méthode de changement peut être utilisée dans la migration pour supprimer une colonne et la migration se déroulera 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 à quelque chose comme 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 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 lorsqu'il s'agit de remove_column, vous ne pourrez donc pas revenir en arrière lors de cette migration.
@Powers - réponse brillante et claire - pourriez-vous développer ce qui suit : "La méthode de changement dans Rails 3 n'est pas intelligente lorsqu'il s'agit de remove_column, donc vous ne pourrez pas revenir en arrière dans cette migration."
@BKSpurgeon - Dans Rails 3, si vous utilisez l'option change
alors la méthode rake db:rollback
se trompera. 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 possible d'utiliser la méthode de modification également pour supprimer des colonnes. Le troisième paramètre est le data_type et dans le quatrième paramètre optionnel vous pouvez donner des options. C'est un peu caché dans la section 'Available transformations' 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 ceci :
remove_column :users, :first_name
Cette solution convient parfaitement si vous ne devez apporter qu'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 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
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.