Je suis horrible à nommer et je me rends compte qu'il existe un meilleur ensemble de noms pour mes modèles dans mon application Rails.
Existe-t-il un moyen d'utiliser une migration pour renommer un modèle et sa table correspondante?
ruby-on-rails
migration
rails-activerecord
Lecture seulement
la source
la source
rake db:migrate
, il échoue. Vous pouvez revenir en arrière et modifier ces noms dans la migration, mais cela deviendra compliqué. Vous feriez mieux de créer un modèle entièrement nouveau plutôt que de le renommer.rake db:schema:load
?rake db:migrate
pour créer une base de données à partir de zéro est activement découragé, précisément en raison des préoccupations signalées par andrew.Réponses:
Voici un exemple:
J'ai dû aller renommer le fichier de déclaration de modèle manuellement.
Éditer:
Dans Rails 3.1 & 4,
ActiveRecord::Migration::CommandRecorder
sait comment inverser les migrations rename_table, vous pouvez donc faire ceci:(Vous devez encore parcourir et renommer manuellement vos fichiers.)
la source
git grep -i activit
c'est très révélateur.Dans Rails 4, tout ce que j'avais à faire était le changement de définition
Et tous mes index ont été pris en charge pour moi. Je n'avais pas besoin de mettre à jour manuellement les index en supprimant les anciens et en en ajoutant de nouveaux.
Et cela fonctionne en utilisant le changement pour monter ou descendre en ce qui concerne les index également.
la source
Les autres réponses et commentaires couvraient le changement de nom de table, le changement de nom de fichier et la lecture de votre code.
Je voudrais ajouter quelques mises en garde supplémentaires:
Prenons un exemple concret auquel j'ai été confronté aujourd'hui: renommer un modèle de «Marchand» en «Entreprise».
la source
Vous devez également remplacer vos index:
Et renommez vos fichiers, etc., manuellement comme d'autres réponses ici le décrivent.
Voir: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Assurez-vous que vous pouvez annuler et restaurer après avoir écrit cette migration. Cela peut devenir délicat si vous vous trompez et que vous êtes bloqué par une migration qui essaie d'effectuer quelque chose qui n'existe plus. Il vaut mieux jeter toute la base de données et recommencer si vous ne pouvez pas revenir en arrière. Soyez donc conscient que vous devrez peut-être sauvegarder quelque chose.
Aussi: vérifiez schema_db pour tout nom de colonne pertinent dans d'autres tables définies par un has_ ou appartient_to ou quelque chose. Vous devrez probablement également les modifier.
Et enfin, faire cela sans une suite de tests de régression serait fou.
la source
Vous pouvez exécuter cette commande: rails g migration rename_ {old_table_name} to {new_table_name}
après avoir modifié le fichier et ajouté ce code dans le changement de méthode
rename_table: {old_table_name},: {new_table_name}
la source